C++ cin如何输入回车停止

浏览:16日期:2023-05-13

问题描述

Problem Description输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。Input输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。Output对于每组输入数据,输出一行,结果保留两位小数。Sample Input0 0 0 10 1 1 0Sample Output1.001.41

这是我写的代码:

//输入两点坐标(X1, Y1), (X2, Y2), 计算并输出两点间的距离。#include <iostream>#include <cmath>#include <vector>#include <iomanip>using namespace std;int main(void){ float px, py, qx, qy; while (cin >> px >> py >> qx >> qy) {int tmp = pow((px - qx), 2) + pow((py - qy), 2);double res = sqrt(tmp);cout << setiosflags(ios::fixed);cout << setprecision(2) << res << endl; }return 0;}

程序应该是这样的:输入一行,按回车显示结果。如果这时再按回车,程序就结束。(误)问题就是不知道怎么停止输入,只能按ctrl+z或者输入非法字符。请问在C++里如何实现?不用C

这是通过的C语言代码

#include <stdio.h>#include <math.h> int main(){ double x1; double y1; double x2; double y2; double result; while((scanf('%lf%lf%lf%lf',&x1,&y1,&x2,&y2))!=EOF){result=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);result=sqrt(result); printf('%.2lfn',result); } return 0;}

我发现按回车也没用,现在我也不清楚机器判断通过的条件是什么。有人能分析下为什么我的不能通过而上面的这个能够通过呢?

问题解答

回答1:

这种算法题目一般都是无限的接受输入,不要求结束的,除非是明确的要求对于什么输入程序要结束首先来说你的代码

//输入两点坐标(X1, Y1), (X2, Y2), 计算并输出两点间的距离。#include <iostream>#include <cmath>#include <vector>#include <iomanip>using namespace std;int main(void){ float px, py, qx, qy; while (cin >> px >> py >> qx >> qy) //cin 输入是类型安全的,不会把一个字母当作数字读进来, //当你输入错误或者达到EOF时,bool(cin)就是false了,所以循环退出 {// 这里的int类型丢失了精度,是你错误的原因,自己检讨int tmp = pow((px - qx), 2) + pow((py - qy), 2); double res = sqrt(tmp);cout << setiosflags(ios::fixed);cout << setprecision(2) << res << endl; }return 0;}

然后。。

// 其实这句用处相当相当小,scanf的返回值是成功输入的数字个数 EOF的一般定义值是0while((scanf('%lf%lf%lf%lf',&x1,&y1,&x2,&y2))!=EOF){ result=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);result=sqrt(result); printf('%.2lfn',result); }回答2:

F6 也可以退出。

cin是标准输入流对象,输入任意非数字字符,流读取失败,就会标记错误,返回false.F6可跳出循环,是因为它表示eof(文件结束符)。

ctrl+z 是直接终止程序进程。

相关文章: