2016-06-28 10 views
1

標準入力からの値の読み込みを試みる変数の定義を次のようにします。私は今、iadaを印刷する場合標準入力からの変数へのプリミティブ型の値の読み取り

int ia = 3; 
double da = 0; 

std::cin >> ia >> da; 

は今はdaは0.23とiaであり、-4.23 -5.01

、標準入力で次の値を入力-4。

なぜC++は-4.23を整数コンポーネントと浮動小数点コンポーネントに分割したのですか?換言すれば、.23はその後の読み込みのために入力ストリームに残っていたのはなぜですか? -4.23は-4に切り捨てられ、iaに読み込まれますか?今

別のシナリオでは、私は上記のコードの同じ部分があるとしたが、今回は私がia店0は(OKこれが続くようだ(ちょうどコンソールがある)は、標準入力ストリームにして数.23を入力してください上記のような動作をしますが、daには今回0が含まれていますか?この状況のように、0.23は切り捨てられて0として読み込まれ、.23は上記のようにdaに読み込まれませんでした。

これらの状況で正確に何が起こっていると考えているのですか。ここでは2つの異なることが起こっています。

答えて

1

なぜC++は-4.23を整数成分と浮動小数点成分に分割したのか、換言すれば.23が後続のストリームの入力ストリームに残ったのはなぜですか。

あなたは、入力に整数と2倍の値が含まれていると伝えましたが、指定したものの入力を解析するのに最適でした。

intの読み込みが開始され、-4と表示され、.という点を見たときに数字を読み取ることができなくなったことが分かりました。その後、C++に二重引用符を読ませるように指示しました。 .23の後にスペースがあり、完全に正当なdouble値のように解釈されました。 OK、これは上記の動作に従うように思われる(ia店0(単にコンソールである)

は、私は上記のように、コードの同じ部分があるとしたが、この時間は、私は、標準入力ストリームにして数0.23を入力します。 )が、その後daを使用すると、整数入力を求めたときに、ストリームが合法的iaに何も解析できなかったので、これは0今回

が含まれています。これにより、ストリームはエラー状態になります。つまり、エラーフラグがリセットされるまで、それ以上の入力は不可能です。

0

簡単。あなたは10進数値を入力するようにコードに指示しました。 '。' -4.23は整数桁ではないため、停止して整数に "-4"を割り当てます。

ストリームポインタは ".23"にあり、これは有効なdoubleの番号です。そのため、スペースまですべてを変数に割り当てました。したがって、double変数には ".23"が含まれています。

変数を同じタイプに変更するか、入力データを変更して最初の項目が整数になるようにしてください。

1
std::cin >> ia 

すべての空白文字をスキップします。次に、std::cinからintを抽出しようとします。 intの一部として使用できない文字が見つかると、その文字は停止します。

.-4は、intの一部として使用することはできません。したがって、抽出はそこで停止する。その後、まだ.23 -5.01がストリームに残っています。

その後、>> da部分でキックします。 .23は有効でdoubleであるため、daに抽出されて格納されています。抽出は空白で停止します。その後、入力ストリームにはまだ-5.01が残っています。

関連する問題