我想编写一个程序,以便从终端获取两组整数输入并计算两个总和.我的意图是通过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;
}
Run Code Online (Sandbox Code Playgroud)
编译后的程序适用于第一组整数输入.但是当我按下Ctrl + D时,第一个总和被计算并打印出来,并且没有进一步输入,将第二个和打印为0.所以基本上第二个while循环在开始时失败,即使cin.iostate有在它之前一直很好.那么为什么会这样呢?我应该如何更改程序,以便第二个while循环按预期进行?
当tty处于规范模式时使用Ctrl-D时,它会关闭系统级管道.无论你做什么都不std::cin会将流恢复到良好的状态.如果您坚持使用Ctrl-D来指示序列的结束(这是一个不常见的接口并且可能最好避免),则需要ICANON使用tcgetattr()和标记tcsetattr()输入流(文件描述符0)清除标志.您需要处理任何控制字符.
读取第一个故障,clear()状态和ignore()违规字符或检查它们是否具有特定值可能更容易.
| 归档时间: |
|
| 查看次数: |
674 次 |
| 最近记录: |