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

雷电之神

我想编写一个程序,以便它从终端接收两组整数输入并计算两个和。我的意图是通过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。因此,即使cin.iostate有了第二个while循环,但从一开始基本上就失败了在此之前被设定为良好。那么为什么会这样呢?我应该如何更改程序,以便第二个while循环可以按预期进行?

迪特玛·库尔(DietmarKühl)

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

读取第一个故障,clear()状态和有问题ignore()的字符或检查它们是否具有特定值可能更容易

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

从C中的eof恢复标准输入

来自分类Dev

在C ++中输入错误后使用输入流

来自分类Dev

如何使用文件作为现有C ++程序的输入流?

来自分类Dev

如何在C ++中写入输入流cin

来自分类Dev

如何在C ++中写入输入流cin

来自分类Dev

C ++快速cin输入流

来自分类Dev

如何在EOF之前停止读取C文件?

来自分类Dev

C# 如何在 DispatcherTimer 停止时恢复代码

来自分类Dev

如何与Node.js进程中的C ++程序输入流进行交互?

来自分类Dev

如何与Node.js进程中的C ++程序输入流进行交互?

来自分类Dev

用户完成在c中的输入后,停止for循环

来自分类Dev

输入后,C while循环不会停止运行

来自分类Dev

如何检测输入流是否为空(但不是EOF)?

来自分类Dev

C诅咒程序结束后如何使屏幕恢复正常

来自分类Dev

在C语言中的scanf()过程中,数据如何从输入流流入输入缓冲区?

来自分类Dev

C ++输入流:Solaris vs. Linux中的操作顺序

来自分类Dev

C ++:文件输入流并跳至下一行?

来自分类Dev

在 C 中使用 sscanf 解析标准输入流中的数字

来自分类Dev

在C ++中收到输入时如何停止执行异步功能

来自分类Dev

如何清空输入流?

来自分类Dev

C - 标准输入、unix 管道和 EOF

来自分类Dev

读取c中的输入后如何清除缓冲区?

来自分类Dev

如何停止C ++程序?

来自分类Dev

如何在不输入 C++ 中的单词的情况下只输入就停止 cin >> ?

来自分类Dev

输入int后的c ++输入char数组

来自分类Dev

输入错误类型后如何“恢复”标准输入

来自分类Dev

如何从输入流文件中获取输入流?

来自分类Dev

如何从输入流文件中获取输入流?

Related 相关文章

热门标签

归档