2017-03-01 4 views
0

たとえば、文字「s」を入力した場合、これはまだ無限ループに入りますが、何人プレイしているのですか? (1-5):「cin.fail()でのエラー処理の問題

int getnumplayers(){ 
    int num_players =0; 
    while(true){ 
     cout<<"How many people are playing? (1-5): "; 
     //cin.ignore(); 
     cin>>num_players; 

     if(cin.fail()){ 
      cout<<"hello"; 
     } 

     else if((num_players < 6 && num_players > 0)){ 
      break; 
     } 
    } 
    return num_players; 
} 

答えて

0

cin.fail()が設定されたら、あなたはそう、それはあなたの要求を飛ばしていますCINは再び読みしていく所存です前cin.clear()でそれをクリアする必要がありますか?。ストリームは "良い" ではありませんので、読み込む。

私はあなたがあなたの場合(cin.fail())ブロックでライン

cin.clear(cin.rdstate() & ~ios_base::failbit); 
cin.ignore(); 

をしたいと思います。