-4

C++ と Java での入力の問題 整数の後に文字列を入力するとスキップされて次のステートメントに移動します。

    string name;
int age;
cout<<"Enter age";
cin>>age;
cout<<"Enter name";
getline(cin,name);



cout<<name;
cout<<age;

getch();

上記のコードは名前をとっていないため、この行をスキップします。

4

3 に答える 3

0
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 の場合、ストリームから次の文字を破棄します。

これが実際のです。

于 2013-10-21T18:43:07.487 に答える