ホームページ > バックエンド開発 > C++ > 「cin」の抽出演算子を使用した後に「getline()」が機能しないのはなぜですか?

「cin」の抽出演算子を使用した後に「getline()」が機能しないのはなぜですか?

DDD
リリース: 2024-11-11 15:51:02
オリジナル
201 人が閲覧しました

Why Doesn't `getline()` Work After Using `cin`'s Extraction Operator?

getline() の動作について

C の getline() 関数は、改行文字が入力されるまで標準入力から文字を読み取るために使用されます。遭遇した。ただし、開発者は、cin の抽出演算子 (>>) の後に getline() を使用すると、予期しない問題が発生する可能性があります。

問題の説明

ユーザーは、コードがgetline() を使用してユーザー提供のメッセージをキャプチャしようとするときに、ユーザー入力の受信を一時停止しません。根本的な原因は、cin 抽出演算子の動作に関連しています。

解決策: 改行文字をフラッシュする

cin の抽出演算子を使用してデータを読み取ると、改行が残ります。入力バッファ内の文字 (n)。 getline() が直後に呼び出されると、この改行文字に遭遇し、すぐに読み取りが停止します。

この問題を解決するには、getline() を呼び出す前にバッファから改行文字をフラッシュする必要があります。これは、次のように cin.ignore() を使用することで実現できます。

string messageVar;
cout << "Type your message: ";
cin.ignore();
getline(cin, messageVar);
ログイン後にコピー

cin.ignore() を挿入すると、改行文字が破棄され、getline() が意図したとおりにユーザーの入力を読み取ることができるようになります。この手法により、cin 演算子と getline() の両方が連続してスムーズに機能することが保証されます。

以上が「cin」の抽出演算子を使用した後に「getline()」が機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート