gpt4 book ai didi

c++ - 如果没有提供管道,读取 std::cin 会挂起

转载 作者:行者123 更新时间:2023-11-27 23:49:16 25 4
gpt4 key购买 nike

我有一个通用形式的函数

void readStuff(std::istream& input){
int var;
while(input>>var){
//... do stuff
}
}

其中输入作为 std::cin 或 std::ifstream 传递,取决于是否设置了命令行选项 -c。从文件中读取

myprog file.txt

工作正常。如果使用 std::cin,

cat file.txt | myprog -c

这也很好用。但是,如果用户尝试,它会挂起

myprog -c

如何在我的代码中处理这种情况?我试过检查 ifstream 的标志,但在所有情况下它们都是 0,除了 ifstream.good()。

最佳答案

您的程序没有挂起; cin 只是在等待来自终端的输入。

当您将 cat 命令的 stdout 传送到程序的 stdin 时,您的 中有一个 EOF >标准输入。这将导致设置 eof 标志,进而导致 while(input>>var) 失败;因此退出循环。

当您直接从终端执行程序时,cin 会一直等待来自终端的输入,直到输入流关闭。您可以通过终端发送一个 EOF 来退出您的程序,这将关闭输入流,从而打破代码中的循环。

如果你想让你的程序在不在管道中时退出,你可以使用isatty检查。在 POSIX 系统和 _isatty在 Windows 上。

关于c++ - 如果没有提供管道,读取 std::cin 会挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47812217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com