每当我在我的代码中使用 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<<" ";
}

https://godbolt.org/z/c54dGdWcq

声明 cin>>n return cin 对象本身,把它放在 while 里面做类似

while(true){
   cin >> n;
   if(cin){ // equals to if(!cin.fail())
      // ... body of while
   }
   else break;
}

所以是的,在你离开循环后,cinin fail state, thus any subsequence operator >> would not success until you call clear


相关:https://en.cppreference.com/w/cpp/io/ios_base/iostate