尽管设置了EOF标志,为什么std :: ws会阻塞?

时间:2014-05-03 12:38:49

标签: c++ stream iostream

如果我运行以下代码并按 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表现得与众不同?

1 个答案:

答案 0 :(得分:1)

试试这个块:

    while (!std::cin.eof()) {
        std::cin >> std::ws;
    }

std::cout << "EOF flag is set\n";

这会反复从cin读取cin.eoffalse