C++ 而(cin>;>;x)和文件结束问题
我有点搞不清楚到底发生了什么,我正在玩一些“加速C++”中的程序,并且遇到了一个早期程序的问题(第35页,如果你碰巧在附近有一个副本) 它使用以下代码段:C++ 而(cin>;>;x)和文件结束问题,c++,loops,C++,Loops,我有点搞不清楚到底发生了什么,我正在玩一些“加速C++”中的程序,并且遇到了一个早期程序的问题(第35页,如果你碰巧在附近有一个副本) 它使用以下代码段: while (cin >> x) { ++count; sum += x; } (“count”是整数,“x”是双精度) 它按预期工作,允许我输入多个值并将它们相加,但我无法找出“文件结束”信号的错误。书中说,循环将一直运行,直到程序遇到文件结束信号,即windows中的ctrl+z 这一切都很好,而且有效,但我的程
while (cin >> x) {
++count;
sum += x;
}
(“count”是整数,“x”是双精度)
它按预期工作,允许我输入多个值并将它们相加,但我无法找出“文件结束”信号的错误。书中说,循环将一直运行,直到程序遇到文件结束信号,即windows中的ctrl+z
这一切都很好,而且有效,但我的程序不会让我再次使用cin。我通常只是设置一个程序来等待某个随机变量,以便在执行后立即停止控制台关闭(顺便问一下,有没有更好的方法可以做到这一点?)。我已经做了很多搜索,但没有发现什么东西没有说明书中已经说过的内容(按ctrl+z,或输入不兼容的输入类型等)
我正在使用Visual studio 2008 express进行编译。EOF意味着
STDIN
(也称为cin
)已关闭。关闭意味着它不能再次使用
也就是说,我认为可以打开另一个输入流,但更好、更正常的解决方案是更好地进行输入/输出处理,并允许用户输入一些表示“停止接受输入”的令牌。从一个角度来看,一旦你到达了输入流的末尾,那么根据定义,流中什么都没有了,所以再次尝试从中读取是没有意义的 然而,如果“流结束”实际上是由windows上的一个特殊字符(如Ctrl-Z)引起的,我们知道有可能我们可以从
cin
再次读取。但是,读取失败将导致设置流上的eof
标志
要清除此标志(以及所有其他故障标志),可以使用clear
方法
std::cin.clear();
调用此命令后,您可以尝试另一次读取。看起来您正在使用windows(否则您将在控制台上,而窗口将不会关闭)。你有两个选择
- 从命令行运行应用程序:
- 启动命令。将cd复制到正确的目录。然后执行命令。
向控制台正确输出,窗口不会关闭
- 启动命令。将cd复制到正确的目录。然后执行命令。
- 使用其他方法停止窗口关闭
- 最简单的方法是暂停。
系统(“暂停”)
- 最简单的方法是暂停。
- 如果不结束输入流,可以重置它。
- 例如,如果您键入的某些文本导致操作员>>失败,则会设置错误位。
您可以使用cin.clear()重置错误位
如果使用ctrl-Z关闭流,这可能不起作用
- 例如,如果您键入的某些文本导致操作员>>失败,则会设置错误位。
- 注意如果您尝试使用cin>>暂停;(暂停是字符或其他东西)
使用cin.ignore()确保流为空,否则将不会发生暂停
因为读取数据后代码将继续