1

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

4 回答 4

6

您的 while 循环将读取输入,直到输入流关闭。在 Windows 控制台中,这意味着直到用户按下 Ctrl+Z。

如果你想在用户按下回车之前读取输入,你需要做不同的事情。例如,您可以使用 getline 读取整行,然后将该行放入 stringstream 并在 while 循环中读取 - 或者您可以在读取每个值后使用类的peek()方法istream来检查下一个字符是否在流是换行符。

于 2012-04-29T11:40:00.503 回答
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。

于 2012-04-29T11:56:25.017 回答
0

在 Windows 控制台中,这意味着直到用户按下 Ctrl+Z

我会注意到,关于最佳答案,这不一定是真的。

输入运算符将在循环中无限期地保持活动状态,直到它变为untruefalse。就其本质而言,它希望将用户输入用于integer。鉴于您的示例,您必须输入任何非整数才能使其评估为假。

于 2015-05-05T03:26:01.480 回答
-1

您不需要 while 循环。cin >> value只有一次。

于 2012-04-29T11:46:13.073 回答