7

对于 C++ 应用程序,如何以编程方式强制标准输入上的文件结尾 (EOF)?

4

3 回答 3

13

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

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

于 2011-01-15T20:54:07.547 回答
6

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

fclose(stdin);

在此之后,您将无法从中读取数据stdin

于 2011-01-15T20:55:01.217 回答
1

专门为此创建的每个流都有一个不错的小功能。

它的语法类似于:

      stream.setstate(stream.flags)


因此,在您的代码中,您可以有一个简单的条件来触发以下内容:

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


这方面的文档非常稀少,但在cppreference.comcplusplus.com上有一些。

于 2015-07-21T17:13:09.693 回答