0
文字または文字列を入力するときに、次のコードが無限ループになるのはなぜですか?私はそれについての質問を見てきましたし、解答で提供された解決策(例here)ですが、それはまったく役に立たないようです。このコードはそこに提案されているソリューションを実装していますが、それでも無限ループが発生します。std :: cinが無限ループになる
#include <iostream>
#include <bitset>
#include <limits>
using namespace std;
int main() {
int n;
while (!(cin >> n)) {
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.clear();
cout << std::bitset<8>(cin.rdstate()) << endl;
cin >> n;
cout << std::bitset<8>(cin.rdstate()) << endl;
}
cout << n;
return 0;
}
g++ --version
folowingをyelds:g++ (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005
次のようにプログラムの出力は次のとおりです。
00000000
00000100
00000000
00000100
... and so on
値はストリームがクリアされたという事実にもかかわらず、再入力beeingているように思えすべての入力は無視されています。
これは、このI/Oコードの*本当に変わった変種であり、私は混乱したものをたくさん見ました。実際に何をしようとしていますか? –
私はちょうどうまく動作するはずですが、正しい入力が与えられたときにループを終了しなければなりません。それが得られるまで。しかし、それは前のものがまだ提供されているかのように、別の入力を求めることはありません。基本的に質問には出発点ではなく、デバッグの試みが含まれています。 –
さて、あなたは混乱を無視してクリアしましたが、これはまだ変わったコードです。 –