C 入力ループで getline() 呼び出しがスキップされるのはなぜですか?

Linda Hamilton
リリース: 2024-11-15 13:24:02
オリジナル
143 人が閲覧しました

Why is My C   Input Loop Skipping getline() Calls?

C 入力ループの getline() での予期しない動作

開発者は、コンソールからユーザー入力を取得しようとして、不可解な問題に遭遇しました。 getline() 関数の問題。予想に反して、プログラムは getline() への最初の呼び出しの後、入力の待機に失敗し、すぐに後続の呼び出しに進みました。

提供されたコード スニペットは、問題のあるセクションを示しています:

getline(cin, inputString);
getline(cin, inputString);
ログイン後にコピー

この動作は、同じ入力ループ内の getline() と入力演算子 (>>) の組み合わせから発生します。その間>>先頭の空白はスキップされ、末尾の改行文字は消費されません。 getline() 呼び出しが続くと、改行は入力バッファーに残り、次の入力の一部として解釈されます。

解決策:

この問題を解決するには、一貫して getline() または >> のいずれかを使用する必要があります。入力ループ全体にわたって。すべての入力が数値であるか、効率的に解析できる場合、>>は適切な選択です。ただし、文字列またはデータ型の混合が関係する場合は、getline() を使用し、入力文字列から数値を手動で抽出する必要があります。

コード リファクタリング:

すべての入力に getline() を使用します:

getline(cin, inputString);
getline(cin, inputString);
getline(cin, inputUInt);
getline(cin, inputUInt);
getline(cin, inputDouble);
ログイン後にコピー

または、>> を使用します。すべての数値入力の場合:

cin >> inputString;
cin >> inputString;
cin >> inputUInt;
cin >> inputUInt;
cin >> inputDouble;
ログイン後にコピー

以上がC 入力ループで getline() 呼び出しがスキップされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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