我正在地址上阅读一些C ++文本:http://www.parashift.com/c++-faq-lite/new/istream-and-while.html。
根据文字,我写了这段代码:
int sum = 0, value;
while(cin >> value)
{
cout << "value: " << value << endl;
sum += value;
}
cout << "sum: " << sum << endl;
如果输入为:1 2 3 4 5
然后while循环没有像我预期的那样停止。我误会了什么吗? (我使用的是MS Visual C ++ 2005)
答案 0 :(得分:6)
您的while循环将读取输入,直到输入流关闭。在Windows控制台中,这意味着在用户按下Ctrl + Z之前。
如果要在用户按Enter键之前读取输入,则需要采取不同的操作。例如,您可以使用getline读取整行,然后将该行放入字符串流并在while循环中读取该行 - 或者您可以在阅读每个行后使用peek()
类的istream
方法value,用于检查流中的下一个字符是否为换行符。
答案 1 :(得分:0)
您可以设置退出循环的特殊值。
例如:
int sum = 0, value = 0;
while(value != -199)
{
cin >> value
if(value != -199) {
cout << "value: " << value << endl;
sum += value;
}
}
cout << "sum: " << sum << endl;
如果你按-199(不一定是-199,我选择了它,因为它对大多数程序来说都是微不足道的),这个循环才会退出。如果您不将它们用作输入,它可以是0或-1。
答案 2 :(得分:0)
在Windows控制台中,这意味着在用户按下Ctrl + Z
之前
我会注意到,关于最佳答案,这不一定是 true 。
输入操作符在循环中将保持无限活动状态,直到它变为 untrue 或 false 。就其本质而言,它正在寻求用户输入整数。根据您的示例,您必须输入任何非整数以使其评估为false。
答案 3 :(得分:-1)
您不需要while循环。 cin >> value
只有一次。