我想写一个程序,从终端接收两组整数输入,并计算出两个和。我的意图是通过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在之前被设置为good了。那么这是为什么呢?我该如何更改程序使第二个while循环能够正常运行呢?
std::cin.clear()
将流重置为良好状态,但他还需要使用std::cin.ignore()
清除缓冲区,以便在EOF后继续使用该流,对吗? - Manu343726std::cin.good()
,因为它会导致最后一行被忽略,例如当最后一行缺少行终止符时。只需使用while(std::cin >> I)
。然而,这种更改并不能解决你的问题。 - Dietmar Kühl