ホームページ >バックエンド開発 >C++ >C の `getline()` がユーザー入力をスキップする場合があるのはなぜですか?それを修正するにはどうすればよいですか?

C の `getline()` がユーザー入力をスキップする場合があるのはなぜですか?それを修正するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-09 07:42:08473ブラウズ

C の

Why Does `getline()` in C   Sometimes Skip User Input, and How Can I Fix It?

getline() : ライン バッファリングの処理

C では、 getline() は標準入力ストリーム cin から入力を読み取るために使用されます。改行文字が現れるまで。ただし、ユーザー入力が要求されるプログラムで使用すると、予期しない動作が発生する可能性があります。

次のコード スニペットを検討してください。

int number;
string str;
int accountNumber;

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

このプログラムを実行すると、次のことに気付くかもしれません。最初の番号を入力すると、プログラムは名前の入力を待たずに、すぐに口座番号の入力を求めます。これは、getline() が入力バッファーから残りの改行文字を読み取るためです。

この問題を回避するには、getline() の前に std::ws (空白) を使用して、すべての空白文字と改行文字をスキップします。入力ストリーム。これにより、 getline() が次の非空白文字から入力を読み取ることが保証されます:

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

このステップを組み込むことにより、プログラムは次の入力に進む前に名前の入力を正しく要求します。

>

以上がC の `getline()` がユーザー入力をスキップする場合があるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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