【发布时间】:2014-06-20 02:31:36
【问题描述】:
如果我运行以下代码并按一次Ctrl+D,它会打印EOF flag is set,但之后不会退出。显然,std::ws 的第二次调用似乎在等待进一步的输入,虽然设置了内部 EOF 标志。
#include <iostream>
int main()
{
std::cin >> std::ws;
if(std::cin.eof())
std::cout << "EOF flag is set\n";
std::cin >> std::ws;
return 0;
}
如果我将第二行 std::cin >> std::ws; 替换为
float f;
std::cin >> f;
程序确实不等待,而是立即退出。
标准中有什么可以解释这种差异吗?此外,有什么方法可以让std::ws 表现不同?
【问题讨论】:
-
可能是编译器错误?
-
@ph4nt0m - 该程序在 VC2013 Express (Windows) 中运行良好。如果有问题,请使用
if (std::cin.good()) std::cin >> std::ws; -
感谢您检查这一点,@MichaelJ。看起来你的假设是正确的,马特。我正在使用 g++ 4.8.1。