The code i am trying to run is given below. Here in line 9 I am trying to take multiple inputs using the while(cin>>n)
method. The input I gave is like :
2 4 5 6 45 357 3 (ctrl+z)(ctrl+z)
to indicate EOF in windows.
Then, even thought the numbers get added into the vector v1
, the istream
is stuck into error state cause the output I get this :
error2 4 5 6 45 357 3.
And I can also confirm that istream is stuck in error state cause if I use another cin
statement after this, it gets ignored by the compiler until I clear the stream by cin.clear()
function.
Can anybody please tell me why does this happen and how can I prevent the stream getting into error state. or is it something normal and I must use cin.clear()
after every while(cin>>(var)) statement?
#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<<" ";
}
the statement cin>>n
return the cin
object itself, put it inside while
does something like
while(true){
cin >> n;
if(cin){ // equals to if(!cin.fail())
// ... body of while
}
else break;
}
so yes, after you leave the loop, cin
is in fail
state, thus any subsequence operator >>
would not success until you call clear
.
relevant: https://en.cppreference.com/w/cpp/io/ios_base/iostate