ホームページ > バックエンド開発 > C++ > C で「getline」が入力を求めるプロンプトを表示しないのはなぜですか?

C で「getline」が入力を求めるプロンプトを表示しないのはなぜですか?

Barbara Streisand
リリース: 2024-11-29 14:14:14
オリジナル
467 人が閲覧しました

Why Doesn't `getline` Prompt for Input in C  ?

getline が入力を要求しない: バッファの問題のケース

C で getline(cin, mystr) を使用すると、ユーザー入力を求めるプロンプトが表示されず、代わりに初期値「0」が価格変数に割り当てられるという問題があります。これは、getline は改行文字 ('n') に遭遇するまで入力を読み取り、入力バッファーに改行文字が残る可能性があるためです。

この問題は、>> のような入力ストリーム演算子を混在させるときに発生します。ゲットラインで。 cinを使用する場合>> i 整数を読み取る場合、ユーザーの入力の後に改行文字が続きます。ただし、この改行は入力バッファ内に残ります。その後 getline を呼び出すと、ユーザーにプロンプ​​トを表示せずに、改行文字が入力として解釈されます。

考えられる解決策:

  • 改行文字を無視する: getline を呼び出す前に、cin.ignore() を使用して入力バッファから改行文字を削除します。例:
cin.ignore();
getline(cin, mystr);
ログイン後にコピー
  • カスタム入力関数の使用: 入力を文字列として読み取り、改行文字を処理して目的のデータ型に変換する関数を作成します。適当に。例:
int getInt() {
  string input;
  getline(cin, input);
  return stoi(input);
}
ログイン後にコピー
  • >> は避けてください。入力の場合: 入力専用に getline を使用し、文字列を目的のデータ型に変換します。このアプローチにより、コードの安全性と堅牢性が向上します。

推奨プラクティス:

すべての入力に getline を使用し、改行文字が適切に処理され、常に入力を求められます。混合は避けてください。>>これらのバッファの問題を防ぐには getline を使用します。

以上がC で「getline」が入力を求めるプロンプトを表示しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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