2017-03-28 11 views
1

を返します。これはどのように機能するのですか(なぜ)?のC++は0

+1

これから説明しているC++テキストブックでは、これについて詳しく説明していませんか? –

+0

"他の文字列"ではありません。 42を入力すると、42が得られます。 – user2079303

+0

これはなぜ機能するのでしょうか?文字列を入力していますが、intに読み込んでいます。タイプと一致しないので、入力を無視していくつかのデフォルト値(0)を返すのが最良の推測です。メモint年齢は任意の既定値に年齢を初期化しません。 –

答えて

6

ないことが明確に記述し、幅広いていないとして、なぜ質問は/近い票を降り(コメントによると判断し、多くの人が答えを知っていない)ことを確認...とにかく

、コードのために:

int age; 
cin >> age; 

入力ストリームは任意の数字が含まれていなかった場合は、ストリームは失敗状態とageに置かれているが0に設定されています。入力ストリームの文字はそこに残ります。それらは、失敗状態がクリアされると、将来の読み出し動作によって読み出すことができる。

operator>>の動作はsummarized on cppreferenceですが、標準の完全な説明はやや複雑です。

注:これはC++ 11で変更されました。ガベージ出力を報告しているコメント者は、C++ 11より前のモードでコンパイラを実行しているか、またはバグがあったものです。

+0

非常に便利な答えです。 –

+0

ヘルプ!このエラーの影響をどのように取り消しますか?私は 'cin.clear()'を実行しようとしましたが、何もしません。 'std :: cin >> rounds'は引き続き' rounds'を0に設定し続けます。 – chbchb55

+0

@ chbchb55ストリームに非数値データがある場合それは正しい動作です。ストリームから数値以外のデータをクリアしたいのですか? (もしそうなら、[ここをクリック](http://stackoverflow.com/a/257182/1505939))。 –

3

入力がint(あなたの場合)に変換できない場合、failbitstd::cinに設定されます。これはstd::cin.fail()を呼び出して取得できます。

std::cin >> age; 
if (std::cin.fail()) { 
    std::cout << "data entered is not of int type"; 
} 

また!std::cinの代わりstd::cin.fail()を使用することができます。

+1

私は '0 'はガベージであり、' ''は失敗したときに引数を設定します。 – HolyBlackCat

+1

@Holyblackcatゴミ。 –

+0

これについてあなたは確信していますか? –

関連する問題