gpt4 book ai didi

c++ - 如何在 C++ 中被 EOF 停止后恢复输入流?

转载 作者:太空狗 更新时间:2023-10-29 20:04:17 25 4
gpt4 key购买 nike

我想编写一个程序,以便它从终端输入两组整数并计算两个总和。我的意图是通过 EOF(按 Ctrl+D)分隔两组输入。这是我的代码:

#include <iostream>
using namespace std;

int main(){
int i,sum=0;
while((cin>>i).good())
sum+=i;
cout<<"Sum 1 is "<<sum<<endl;
cin.clear();
sum=0;
while((cin>>i).good())
sum+=i;
cout<<"Sum 2 is "<<sum<<endl;
return EXIT_SUCCESS;
}

编译后的程序对于第一组整数输入运行良好。但是当我按下 Ctrl+D 时,第一个总和被计算并打印出来,并且在没有进一步输入的情况下,将第二个总和打印为 0。所以基本上第二个 while 循环在一开始就失败了,即使 cin.iostate 有之前已经设置好了。那么为什么会这样呢?我应该如何更改程序以使第二个 while 循环按预期进行?

最佳答案

当您在 tty 处于规范模式时使用 Ctrl-D 时,它会关闭系统级管道。无论您对 std::cin 做什么,都不会将流恢复到良好状态。如果您坚持使用 Ctrl-D 来表示序列的结束(这是一个不寻常的界面,最好避免),您需要使用 tcgetattr() 清除 ICANON 标志tcsetattr() 用于标准输入流(文件描述符 0)。您将需要处理任何控制字符。

阅读第一次失败可能更容易,clear() 状态和 ignore() 违规字符或检查它们是否有一个特定的值。

关于c++ - 如何在 C++ 中被 EOF 停止后恢复输入流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20815349/

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