C++ と Java での入力の問題 整数の後に文字列を入力するとスキップされて次のステートメントに移動します。
string name;
int age;
cout<<"Enter age";
cin>>age;
cout<<"Enter name";
getline(cin,name);
cout<<name;
cout<<age;
getch();
上記のコードは名前をとっていないため、この行をスキップします。
C++ と Java での入力の問題 整数の後に文字列を入力するとスキップされて次のステートメントに移動します。
string name;
int age;
cout<<"Enter age";
cin>>age;
cout<<"Enter name";
getline(cin,name);
cout<<name;
cout<<age;
getch();
上記のコードは名前をとっていないため、この行をスキップします。
std::cin >> age;
std::getline(std::cin, name);
ユーザーが整数 5 を入力するとします。入力ストリームは次のようになります。
5\n ...
上記は異なる場合があることに注意してください。ユーザーは整数を入力し、続いてスペース文字を入力できます。どちらも同じように有効な状況です。
つまり、ユーザーが値を入力し、リターンを押して送信します。operator >>
整数が消費されるようにフォーマットされていますが、新しい行または空白の抽出が見つかると停止します。入力操作の後、新しい行はまだストリームにあるはずです。
\n ...
では、次のコンテンツを見てみましょうname
。
\n "Bruce Wayne"\n
実行時getline
に、ストリーム内に新しい行が見つかると、新しい入力の検索を停止します。前の抽出からの新しい行がまだストリームにあるため、入力はすぐに停止されました。何も抽出されませんでした!
幸いなことに、メソッドを使用してignore
、ストリームから新しい行を破棄できます。
std::cin >> age;
std::cin.ignore(); // ignore the next character
std::getline(std::cin, age);
デフォルトでstd::cin.ignore
は、引数が 0 の場合、ストリームから次の文字を破棄します。
これが実際の例です。