【发布时间】:2015-12-02 00:06:12
【问题描述】:
我几乎可以肯定有人问过这个问题,但经过长时间的搜索,我仍然找不到答案。我从 Accelerated C++ 中提取了这段代码,但在终止 while 循环时遇到了问题。代码在这里:
#include <iostream>
#include <vector>
using namespace std;
istream& read(istream& in, vector<double>& vec)
{
cout << "start reading" << endl;
if (in) {
vec.clear();
double x;
while (in >> x) {
cout << "x=" << x << endl;
vec.push_back(x);
}
in.clear();
}
cout << "end reading" << endl;
return in;
}
int main() {
vector<double> vec;
read(cin, vec);
return 0;
}
我输入1 2 3 4 5 键入EOF(MacOS 上的Ctrl-D)程序不会终止。我可以继续在向量中输入值:
start reading
1 2 3 4 5 x=1
x=2
x=3
x=4
x=5
5
x=5
6
x=6
7
x=7
我在这里找到的最接近的问题: http://www.cplusplus.com/forum/beginner/49993/
【问题讨论】:
-
当标准输入来自文件时它是否终止(如
mypog < inputfile)? -
另外,您的代码存在问题:只有
cout在while循环内,vec.push在循环外,即使缩进表明您打算这样做在循环内(它应该在哪里)。在两条线周围使用花括号。 -
如果你在终端运行
cat(不带参数),当你按下Ctrl-D时它会终止吗? -
关于
cat它只适用于Ctrl-D。但我找到了答案!在下面检查它。并感谢您对花括号的评论......我真丢脸:)
标签: while-loop cin terminate accelerated-c++