为什么while(std :: cin>> foo)语法不起作用?

时间:2012-04-29 11:38:14

标签: c++ cin

我正在地址上阅读一些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)

4 个答案:

答案 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只有一次。