我对发生了什么感到困惑,我正在使用“Accelerated C ++”中的一些程序,并且遇到了一个早期程序的问题(第35页,如果你碰巧有副本)附近)。
它使用此代码段:
while (cin >> x) {
++count;
sum += x;
}
(“count”是整数,“x”是双精度)
它按预期工作,允许我输入几个值并将它们加在一起,但我无法弄清楚“文件结束”信号出现了什么问题。书中说循环将继续运行,直到程序遇到文件结束信号,即Windows中的ctrl + z。
这一切都很好,并且有效,但之后我的程序不会让我再次使用cin。我通常只是设置一个程序来等待一些随机变量,以便在执行后立即停止控制台关闭(顺便说一下,还有更好的方法吗?)这就是我注意到这一点,我想知道如果有解决方案。我已经做了很多搜索,但发现很少没有说出书中已经说过的内容(按ctrl + z,或输入不兼容的输入类型等。)
我正在使用Visual Studio 2008 express进行编译。
答案 0 :(得分:7)
从一个角度来看,一旦你到达输入流的末尾,那么按照定义,流中没有任何内容,所以尝试从中再次阅读是没有意义的。
但是,如果'end-of-stream'实际上是由Windows上的Ctrl-Z引起的特殊字符,我们知道有可能我们可以再次从cin
读取。但是,失败的读取将导致设置流上的eof
标志。
要清除此标志(以及所有其他失败标志),您可以使用clear
方法。
std::cin.clear();
调用此函数后,您可以尝试另一次阅读。
答案 1 :(得分:2)
EOF表示STDIN
(也称为cin
)已被关闭。封闭意味着它不能再次使用。
那就是说,我认为可以打开输入的另一个流,但更好,更正常的解决方案是做更好的输入/输出处理,并允许用户输入一些表示“停止接受输入”的标记
答案 2 :(得分:1)
看起来你正在使用Windows(否则你将在控制台上并且窗口不会关闭)。你有两个选择。