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