5

std::cinユーザーに Enter キーを押してプログラムを終了させたい場合、それを使用するプログラムを作成するときはいつでもstd::cin.ignore()、目的の動作を得るために 2 回記述する必要があることに気付きました。例えば:

#include <iostream>

int main(void)
{
    int val = 0;
    std::cout << "Enter an integer: ";
    std::cin >> val;

    std::cout << "Please press Enter to continue..." << std::endl;

    std::cin.ignore();
    std::cin.ignore();  // Why is this one needed?
}

cinまた、実際の入力に使用しているのではなくignore()、最後の呼び出しに使用している場合は、1 つしか必要ないことにも気付きました。

4

2 に答える 2

8

Discl: 実際に何が起こるかを単純化しています。

1 つ目は、抽出演算子 (>>) が消費していないものをパージするのに役立ちます。2 番目は別の \n を待ちます。

抽出後に std::getline を実行する場合もまったく同じです: the_stream::ignore(std::numeric_limits<streamsize>::max(), '\n');std::getline() の呼び出しの前に a が必要です。

于 2009-03-10T16:59:53.433 に答える
0

それは奇妙だ。どのプラットフォームで実行していますか? 定義によりignore、入力ストリームから n 文字を抽出して破棄するか、EOF に達すると停止します。パラメータを指定しない場合、1 文字が抽出されます。Windows では、行末には a\rと a の両方が含まれます\n-- 合計 2 文字 (キャリッジ リターンの後に改行)。

于 2009-03-10T16:57:56.810 に答える