如何在stdin上强制执行eof?

时间:2011-01-15 20:51:12

标签: c++ stdin eof

对于C ++应用程序,如何以编程方式强制stdin上的文件结束(EOF)?

3 个答案:

答案 0 :(得分:9)

如果您在类似Unix的系统中的终端,请点击Ctrl-D。在Windows中,Ctrl-Z

编辑:看到了“以编程方式”执行此操作的愿望,我建议尝试fclose(stdin)。如果某种程度上不够好,一个更疯狂的想法可能是使用std::cin.rdbuf()来设置流以引用除真正的标准输入之外的其他内容,然后对该流做你想做的事情。但这开始闻起来很糟糕,就像你正在与计算机作斗争一样,所以我想更多地了解真正的目标是什么。

答案 1 :(得分:6)

实际上,你做不到。只要你能从stdin读取数据,就没有达到EOF,事实上你永远无法达到它。但是,您可以关闭stdin本身。要关闭它,请执行以下操作:

fclose(stdin);

此后,您无法从stdin读取数据。

答案 2 :(得分:1)

对于为此特别创建的每个流,都有一个很好的小功能。

它的语法类似于:

      stream.setstate(stream.flags)


因此,在您的代码中,您可以拥有一个简单的条件来触发类似:

      std::cin.setstate(std::cin.eofbit);


这方面的文档相当稀疏,但cppreference.comcplusplus.com上有一些文档。