在push_back cin不起作用之后

时间:2014-04-23 11:56:18

标签: c++

我对此代码有疑问:

int main()
{
    int x, sum = 0, how_many;
    vector<int> v;

    cout << "Write few numbers (write a letter if u want to end)\n";

    while (cin >> x)
    {
        v.push_back(x);
    }

    cout << "How many of those first numbers do u want to sum up?" << endl;
    cin >> how_many;

    for (int i = 0; i < how_many; ++i)
    {
        sum += v[i];
    }
    cout << "The sum of them is " << sum;

    return 0;
}

问题是控制台不能让我写入how_many并发生错误。当我在cout << "Write few..."之前放置第6行和第7行时,一切都完美无缺。有人能告诉我为什么会这样吗?

2 个答案:

答案 0 :(得分:6)

cin无法将输入转换为整数时,循环结束,这使cin处于错误状态。它还包含最后一行输入。除非你清除坏状态,否则任何进一步的输入都将失败:

cin.clear();    // clear the error state
cin.ignore(-1); // ignore any input still in the stream

(如果您喜欢详细程度,则可以指定std::numeric_limits<std::stream_size>::max(),而不是依赖于-1到无符号类型的最大值的转换。

答案 1 :(得分:3)

您需要清除cin错误状态,因为您错误地结束了int vector读取操作。

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