0

基本的にこのようなコードがあります

int a;
cin>>a;

if(!cin.good())
{
    std::cin.clear();
    std::cin.ignore(2);

    // set some default value for 'a' and display some messages
}

これは、(予想どおり) 整数を指定した場合、またはそれを少しいじって 2 文字まで指定した場合に正常に機能します。例えば。'ss' ですが、3 文字の入力 'sss' を指定すると、最後の 's' は無視されず、プログラム内にあるその他の cin の入力として受け入れられます。

最初のcinが発生した後、標準入力(バッファ?)の文字数をカウントする方法はありますか?そのため、それらすべてを安全に無視できます。

4

3 に答える 3

3

これはどのように作動しますか?入力バッファで利用可能なものはすべて無視し、その 3 分の 1sが後で消費されるのを防ぎます。を使用していますstd::basic_streambuf::in_avail

std::cin.ignore(std::cin.rdbuf()->in_avail());

それでもうまくいかない場合は、改行に到達するまで無視してみてください。

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
于 2012-09-03T05:02:59.570 に答える
2

何を意味するのかはまったく不明ですが、1 つの意味は、現在の行のすべての文字を無視したいということです。そのために文字数を知る必要はありません。

std::cin.ignore(std::numeric_limits<std::size_type>::max(), '\n');

上記のステートメントは、改行文字を抽出するまですべての文字を無視します。

于 2012-09-03T04:56:45.603 に答える
0

いくつかのグーグルを行っていると、 cin の無関係な文字に対処する方法に関するこの記事を見つけました。

>>どうやらon をstd::cin直接使用するのは良い習慣ではありません。こんな感じで使って、

int a;
std::string line;
std::getline( cin, line );
std::stringstream ss( line );

if ( ss >> a )
    // Success

// Failure: input does not contain a valid number

\nを使って毎回最後まで読んでいるのでstd::getline()、 からも余分な文字を抜き出してstd::cin入れてlineいます。

コードソース

于 2012-09-03T05:17:09.690 に答える