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 サイトの他の関連記事を参照してください。