0

このコードは、C ++(2003)の「データ構造と問題解決」という本からのものです。

void getInts( vector<int> & array )
{

    int itemsRead = 0;
    int inputVal;

    cout << "Enter any number of integers: ";

    while( cin >> inputVal )
    {
        if( itemsRead == array.size( ) )
        array.resize( array.size( ) * 2 + 1 ) ;
        array[ itemsRead++ ] = inputVal;

    }

    array.resize( itemsRead ) ; 

}

int main()
{

    vector<int> array;

    getInts( array ) ;

    for( int i = 0; i < array.size( ) ; i++ )
        cout << array[ i ] << endl;

    return 0;

}

コンソールに数字を入力してEnterキーを押すと、プログラムは何もしません。その後、EOFとしてCTRL + Zを入力すると、プログラムは入力した番号を表示します。ベクトルのサイズを変更し、その各部分にinputValueを指定しているので、CTRL + Zを入力する前にプログラムが生成するのと同じくらい、1つではなく多くの数値が表示されると思いますが、それは起こりません。結局、ベクトルのサイズは1のようです。これの理由は何ですか?

また、私の他の質問は、whileループを次のように使用する場合です。

while( cin >> inputVal )

Ctrl + Zを入力するまで、プログラムは機能しますか。または、0と入力しても同じことができますか?

4

1 に答える 1

1

while ループは、cin が端末から整数を読み取ることができる間続行されます。Enter キーを押すたびに整数を読み取ろうとします。

読み取られた各整数がベクトルに追加されます。

整数以外を入力すると、cin のフェイル ビットがセットされます。

cin >> inputValは、フェイル ビットが設定されている場合 operator void* ()に返されるを提供する istream を返します。0

そのため、整数以外のものを入力すると while ループが発生します。'q'

于 2012-06-08T00:28:49.810 に答える