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