0

这段代码来自《Data Structures and Problem Solving in 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 键时,程序什么也不做。之后,如果我输入 CTRL+Z 作为 EOF,程序会给我我输入的数字。由于我正在调整向量的大小并将 inputValue 赋予它的每个部分,因此我希望看到许多数字而不是一个,就像在我键入 CTRL+Z 之前程序生成的一样多,但这不会发生。毕竟,矢量的大小似乎是 1。这是什么原因?

另外我的另一个问题是,当我使用 while 循环作为

while( cin >> inputVal )

在我输入 CTRL+Z 之前,程序是否可以正常工作。或者输入 0 会做同样的事情?

4

1 回答 1

1

while 循环将继续,而 cin 可以从终端读取整数。每次按下回车键时,它都会尝试读取一个整数。

每个读取的整数都附加到向量中。

如果输入的不是整数,则将设置 cin 上的失败位。

cin >> inputVal返回一个 istream,它提供,如果设置了失败位 operator void* (),它将返回。0

这就是为什么如果您输入的不是整数,例如,while 循环就会中断。'q'

于 2012-06-08T00:28:49.810 回答