我对此代码有疑问:
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行时,一切都完美无缺。有人能告诉我为什么会这样吗?
答案 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');