2

以下のコードは、出力を次のように示しています。

enter something
abc
you entered: a
you entered: b
you entered: c
  #include "stdafx.h"
    #include <iostream>

    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
    char c;

    while(cin>>c)
    {
    //Do something  
        cout<<"you entered: "<<c<<"\n";
    }


    return 0;
    }

入力した最初の文字だけが表示されないのはなぜですか?私はそれを使用することによって最初の文字の後にcinバッファを無視するように強制できることを知っています

cin.ignore(1,'\n')

しかし、1つの文字だけを準備し、残りを無視するべきではありませんか?

4

3 に答える 3

1

...しかし、1つの文字だけを準備し、残りを無視するべきではありませんか?

いいえ。正しく機能し、何かを無視する必要があるという考えをどこで得たのかわかりません。バッファにあるものはすべて読み取り、バッファが空の場合はさらに入力を待つのをブロックします。あなたの場合、whileループを3回繰り返した後でのみ空になります。

于 2013-01-21T13:14:46.410 に答える
0

cinは、RETURNキーが押された後にのみ、キーボードからの入力を処理できます。whileループは、cinバッファー内のすべての文字が1つずつ印刷されるまで操作を続行しました。

プログラムの動作も同様です。

于 2013-01-21T13:15:34.803 に答える
0

あなたのコードは言うwhile (cin >> c) doStuff。つまり、読み取る文字がある限り、doStuffです。したがって、プログラムはまさにそれを実行しています。たぶん意味がありif (cin >> c)ますか?

于 2013-01-21T12:56:44.173 に答える