私はビャーネ・ストロヴストルップのプログラミングを通じて働いている - C++を使用しての原則と実践し、次の例に来た:C++で文字列値をint変数に代入しようとしていますか?
#include "std_lib_facilities.h"
int main() {
/* Name and Age input */
cout << "Please enter your first name and age\n";
string first_name = "???";
int age = -1.0;
cin >> first_name >> age;
cout << "Hello," << first_name << "(age " << (age * 12) << " months)\n";
return 0;
}
あなたはカルロス・22プログラムと入力を実行した場合、それが正しく出力意志Hello, Carlos (age 22)
を。しかし、カルロスを22個入れた場合、出力はHello, 22 (age -1)
であると言われています。なぜなら、「カルロスは整数ではないので、読み込まれません」。しかし、私はそれを実行すると、Hello, 22 (age 0)
を返します。それは、ガベージ値を割り当てているようです。整数を入力しない限り、age
変数に何かを代入しようとしない限り、なぜこのことが起こっているのか不思議です。私はブレークポイントでコードを実行し、非整数入力が入力されたらage
の値が-1から0に変わることを確認しました。
何か間違っていますか?あるいは、これは私がXcodeを通してビルドしているという事実と、それに含まれているコンパイラが何であっても奇妙ですか?
これはあなたが得ている「未定義の行動」です。このような場合、出力は何でもかまいません –
C++ 11以降では、抽出が失敗したときにC++ 11より前にスカラー型を0に設定します。 – user657267
@ user657267、ああ、ありがとう。私はそれがC++ 11の本の更新版であったので混乱しましたが、あなたのコメントを読んだ後、私は正誤表を調べました。ありがとう! – Dan