我想编写一个程序,以便它从终端接收两组整数输入并计算两个和。我的意图是通过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循环可以按预期进行?
当tty处于规范模式时使用Ctrl-D时,它将关闭系统级管道。无论您做什么,std::cin
都无法将流恢复到良好状态。如果您坚持使用Ctrl-D来指示序列的结束(这是一个不寻常的接口,可能最好避免使用),则需要ICANON
使用tcgetattr()
和清除tcsetattr()
标准输入流(文件描述符0)的标志。您将需要处理任何控制字符。
读取第一个故障,clear()
状态和有问题ignore()
的字符或检查它们是否具有特定值可能更容易。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句