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

「cin」を使用した後に「getline」が入力を求めるプロンプトを表示しないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-01 06:48:10
オリジナル
597 人が閲覧しました

Why Doesn't `getline` Prompt for Input After Using `cin`?

getline が入力を要求しない

コード内で getline(cin, mystr); を呼び出すと、プログラムは入力を求めるプロンプトを表示できません。ユーザーが入力します。これは、以前に cin >> を使用したときに、名前;そしてシン>> i;、ユーザーが応答を入力した後に入力した改行文字が入力バッファーに残されました。

空白区切り

>>演算子は空白で区切られます。これは、ユーザーがデータを入力した後に Enter キーを押すと、改行文字が変数に格納されず、入力バッファーに残ることを意味します。

getline の動作

getline も空白で区切られます。 getline を呼び出すと、入力バッファーで改行文字が検索されます。改行文字はバッファー内にすでに存在しているため、getline は探しているものをすぐに見つけ、ユーザーに入力を求めません。

解決策

この問題を解決するにはでは、次のいずれかの方法を使用できます:

  1. Call無視: >> を使用する間
  2. getline を排他的に使用する: >> を使用する代わりに、すべてのユーザー入力に getline を使用します。 stringstream を使用して、文字列入力を目的のデータ型に変換します。

改良されたコード:

getline のみを使用するコードの改良版を次に示します:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() {
    string name;
    int age;
    float price;

    cout << "Hello World!" << endl;
    cout << "What is your name? ";
    getline(cin, name);
    cout << "Hello " << name << endl;
    cout << "How old are you? ";
    getline(cin, age);
    cout << "Wow " << age << endl;

    cout << "How much is that jacket? ";
    getline(cin, price);
    stringstream(price) >> price;
    cout << price << endl;
    system("pause");

    return 0;
}
ログイン後にコピー

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

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