提问人:Heng Wei 提问时间:4/16/2022 更新时间:5/16/2022 访问量:476
如何去除 cin 缓冲液中的 EOF?
How do I remove EOF in cin buffer?
问:
我用一个例子来说明我的意思:在我的 Mac 上,要离开第一个“while 循环”,用户必须键入“CTRL+D”。据我了解,这是通过在 cin 缓冲区中添加 EOF 来实现的,因此“c >> x”返回 false。现在,我打算让用户在离开第一个循环后进入第二个“while 循环”。如何从 cin 缓冲区中清除 EOF,以便“cin >>”y 返回 true?
using namespace std;
int main()
{
int x;
int y;
while(cin >> x)
{
cout << x << endl;
}
if(cin.get()==EOF) cout << "yes" << endl;
while(cin >> y)
{
cout << y*y << endl;
}
return 0;
}
答:
1赞
MoeNeuron
5/16/2022
#1
也许现在回答已经晚了,但对于可能像我一样有类似情况的其他人来说;我必须在提示用户时处理信号,并且仍然需要稍后在程序中。一种方法是执行 fork/wait(一个一般示例),以便预期的代码段可以由另一个子进程执行,然后在不影响父进程的情况下终止。EOF
stdin
EOF
stdin
我之前尝试过其他解决方案但没有成功,即.如果发出信号,则程序应关闭 - 通常通过 + (unix) 或 + (windows)。std::cin.clear()
stdin
EOF
CTRLDCTRLZ
评论
EOF
std::cin.clear()
ctrl-D
get()
EOF
if (stream-is-in-error) return EOF; else return-next-character;