ホームページ >バックエンド開発 >C++ >「cin」を使用した後に「getline()」が入力をスキップするのはなぜですか?

「cin」を使用した後に「getline()」が入力をスキップするのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-08 19:21:10840ブラウズ

Why Does `getline()` Skip Input After Using `cin`?

getline() での入力スキップのアドレス指定

プログラム内で getline() 関数を使用する場合、共通の事項に注意することが重要です。問題: 数値を入力した後、すぐに次の入力が得られる。この動作は、数値を入力した後に入力ストリームに改行文字が残っているために発生する可能性があります。

具体的な例を見てみましょう:

int number;
string str;
int accountNumber;

cout << "Enter number: ";
cin >> number;
cout << "Enter name: ";
getline(cin, str);
cout << "Enter account number: ";
cin >> accountNumber;

このコードを実行すると、予期しない動作が行われます。番号を入力すると、ユーザーが getline(cin, str) を使用して名前を入力することはできず、すぐに「アカウント番号を入力してください」と出力されます。

この動作の理由は、getline() が入力を読み取る方法にあります。改行文字を含む行全体を読み取ります。数値を入力して Enter キーを押すと、改行が入力ストリームに残ります。 getline() が呼び出されると、他の入力を待たずに、この改行を読み取って戻ります。これにより、プログラムは「Enter name:」プロンプトをスキップします。

この問題を解決するには、getline( を呼び出す前に、std::ws マニピュレータを使用して、改行文字を含む先頭の空白をスキップします。 )。更新されたコードは次のとおりです:

cout << "Enter number: ";
cin >> number;
cout << "Enter name: ";
cin >> std::ws;
getline(cin, str);
cout << "Enter account number: ";
cin >> accountNumber;

この変更により、プログラムは "Enter name:" プロンプトで正しく一時停止し、ユーザーが続行する前に名前を入力できるようになります。

以上が「cin」を使用した後に「getline()」が入力をスキップするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。