2016-10-12 209 views
0

私はここで多くの既存の回答を通過しました。StackOverflow、しかし私はまだ立ち往生しています。C++でcinバッファをクリアする方法

コード:私は代わりに整数の入力例えばsを絞る入力する

int c; 
cin >> c; 

if(cin.fail()) { 
    cout << "Wrong Input"; 
    cin.clear(); 
    cin.ignore(INT_MAX, '\n'); 
} 
else 
{ 
    cout << c*2; 
} 

、それはWrong Inputを出力します。しかし、整数を入力して文字列を入力すると、文字列を無視して前の整数結果を出力し続けるため、cinバッファがクリアされず、古い値のcが実行され続けます。 誰もがcin.ignore()以外の最良の方法を提案してもらえませんか? と私のためにええ、cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');のmax()はエラーを返します。だからこれはどちらもうまくいかない。

+1

@Nathanおかげで、なぜあなたはこの作業を行うための正しい方法を取得するために質問をしませんか? [This](http://stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted-extraction)は、状況を正しく処理する方法です。 – NathanOliver

+0

ご質問をより明確にすることができますか([MCVE]の提供など)。私は、あなたのコードではうまくいかないはずのものを見つけられません。私はそれを得ることができません[コンパイル](http://ideone.com/Syb32Q) –

+0

@ NathanOliverこれは私に 'numeric_limits :: max()'エラーを与えるmax() (a、b))(((a)>(b))) (a):(b))」を使用してください。 @πάνταῥεῖ私はそれがより明確かもしれないと思うビデオをアップロードしようとします。 – Nix

答えて

0

max()関数は、ファイルの先頭に定義する必要があります。 cin.ignore()はバッファをクリアするのにうまく機能しますが、私の場合はエラーを出していた数値制限関数max()が必要です。

ソリューション:

#ifdef max 
#define max 
#endif 

上にこれらの行を追加し、次のような機能が正常に動作します。

int id; 
bool b; 
do { 
    cout << "Enter id: "; 
    cin >> id; 
    b = cin.fail(); 
    cin.clear(); 
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
} while (b == true); 

P.S:

関連する問題