8
#include <iostream>
int main( )
{
   using namespace std;
   cout << cin.rdbuf()->in_avail() << endl;
   cin.putback(1);
   cin.putback(1);
   cout << cin.rdbuf()->in_avail() << endl;
   return 0;
} //compile by g++-4.8.1

これは0と2を出力すると思います

しかし、コードを実行すると、0 と 0 が出力されるのはなぜですか?

または cin.putback(1); を変更した場合 int に; シン >> a; 入力 12 12;

それでも0と0を出力します

4

2 に答える 2

7

どうやらそれは一部のコンパイラ実装のバグ/機能です 行を挿入します

cin.sync_with_stdio(false);

コードの先頭近くのどこかにあり、それで修正されるはずです

編集:また、入力文字の末尾をカウントするため、in_avail は常に入力の文字数よりも 1 多い数を返すことにも注意してください。

EDIT2:また、チェックしたばかりのように、最初にストリームから何かを読み取ろうとしない限り、プットバックは機能しません。したがって、「プットバック」の「バック」です。cin に文字を挿入したい場合は、このスレッドが答えを提供します: Injecting string to 'cin'

于 2015-03-25T17:06:08.767 に答える