对于C ++应用程序,如何以编程方式强制stdin上的文件结束(EOF)?
答案 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.com和cplusplus.com上有一些文档。