如果我运行以下代码并按 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
表现得与众不同?
答案 0 :(得分:1)
试试这个块:
while (!std::cin.eof()) {
std::cin >> std::ws;
}
std::cout << "EOF flag is set\n";
这会反复从cin
读取cin.eof
为false
。