0

次のコードがあります。

    int data = 0;
    cout << "Enter a number: ";
    cin >> data;
    cout << "You entered " << data << endl;

    string str;
    cout << "Enter a string: ";
    getline(cin,str);
    cout << "Your entered " << str << endl;

最初のプロンプトが表示された後、有効な数字の 10 を入力しました。しかし、リターン キーを押すとすぐに、プログラムは次のように出力しました。

あなたが入力した 10 文字列を入力してください: あなたが入力した

つまり、2 番目の文字列入力を要求しませんでした。どうしたの?

ありがとう

4

4 に答える 4

3
std::cin >> data;

の番号を入力しdataReturnキーを押して入力を送信すると、新しい行がストリームに挿入されます。改行は入力ストリームのデフォルトの区切り文字です。これstd::getline(std::cin, str)を使用すると、コンパイラは改行が既にストリームにあることを認識し、実行を停止します。これを解決するには、問題のある文字を次のように無視する必要があります。std::cin.ignore

std::cin.ignore();
std::getline(std::cin, str);
于 2013-06-09T02:18:08.950 に答える
1

入力ストリームで数値と文字列を混在させるという古典的な問題。両方に getline を使用し、stringstream を使用して解析します。

于 2013-06-09T02:12:02.420 に答える
0

以下をご覧ください。問題は、整数を読み取っても末尾の改行が読み取られないことです。その改行は使用時に消費されるgetline(...)ため、プログラムは終了します。最初にその改行を消費する必要があります。

int data = 0;
cout << "Enter a number: ";
cin >> data;
cout << "You entered " << data << endl;

string str;
cout << "Enter a string: ";
getline(cin,str); // consume endline <------------------
getline(cin,str);
cout << "Your entered " << str << endl;
于 2013-06-09T02:18:30.350 に答える
0

10 を入力すると、実際には "10\n" と入力され、10 に改行が追加されます。OS に依存する可能性がありますが、何が起こっているかについての基本的な考えは、cin が単に入力バッファーから 10 を読み取り、改行文字を残すということです。次に、プログラムが getline 部分に到達すると、getline は入力バッファーから "\n" を読み取ります。"\n" は getline のデフォルトの終了文字であるため、getline は終了し、プログラムは続行します。

したがって、プログラムの最後では、str には単純に "\n" が含まれます。

于 2013-06-09T02:25:33.433 に答える