每当我在我的代码中使用 while(cin>>(var)) 时,istream 就会陷入错误状态
Whenever i use while(cin>>(var)) in my code, the istream gets stuck in error state
我正在尝试 运行 的代码如下。在 第 9 行 中,我尝试使用 while(cin>>n)
方法获取多个输入。我给出的输入是这样的:
2 4 5 6 45 357 3 (ctrl+z)(ctrl+z)
在 windows 中指示 EOF。
然后,即使数字被添加到向量 v1
中,istream
仍处于错误状态,导致我得到以下输出:
error2 4 5 6 45 357 3.
而且我还可以确认 istream 卡在错误状态,因为如果我在此之后使用另一个 cin
语句,它会被编译器忽略,直到我通过 cin.clear()
函数清除流。
任何人都可以告诉我为什么会发生这种情况以及如何防止流进入错误状态。还是这是正常现象,我必须在每次 while(cin>>(var)) 语句后使用 cin.clear()
?
#include <iostream>
#include <vector>
using std:: cin; using std:: cout; using std::endl;using std::vector;
int main(){
vector<int> v1;
int n;
cout<< "enter the list of numbers";
while(cin>>n){
v1.push_back(n);
}
if((cin>>n).fail()){cout<<"error";}
for (auto i: v1){
cout<< i<<" ";
}
声明 cin>>n
return cin
对象本身,把它放在 while
里面做类似
while(true){
cin >> n;
if(cin){ // equals to if(!cin.fail())
// ... body of while
}
else break;
}
所以是的,在你离开循环后,cin
是 in fail
state, thus any subsequence operator >>
would not success until you call clear
。
我正在尝试 运行 的代码如下。在 第 9 行 中,我尝试使用 while(cin>>n)
方法获取多个输入。我给出的输入是这样的:
2 4 5 6 45 357 3 (ctrl+z)(ctrl+z)
在 windows 中指示 EOF。
然后,即使数字被添加到向量 v1
中,istream
仍处于错误状态,导致我得到以下输出:
error2 4 5 6 45 357 3.
而且我还可以确认 istream 卡在错误状态,因为如果我在此之后使用另一个 cin
语句,它会被编译器忽略,直到我通过 cin.clear()
函数清除流。
任何人都可以告诉我为什么会发生这种情况以及如何防止流进入错误状态。还是这是正常现象,我必须在每次 while(cin>>(var)) 语句后使用 cin.clear()
?
#include <iostream>
#include <vector>
using std:: cin; using std:: cout; using std::endl;using std::vector;
int main(){
vector<int> v1;
int n;
cout<< "enter the list of numbers";
while(cin>>n){
v1.push_back(n);
}
if((cin>>n).fail()){cout<<"error";}
for (auto i: v1){
cout<< i<<" ";
}
声明 cin>>n
return cin
对象本身,把它放在 while
里面做类似
while(true){
cin >> n;
if(cin){ // equals to if(!cin.fail())
// ... body of while
}
else break;
}
所以是的,在你离开循环后,cin
是 in fail
state, thus any subsequence operator >>
would not success until you call clear
。