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

Why while (std::cin >> foo) syntax does not work?

本文关键字:gt 语法 不起作用 foo std 为什么 cin      更新时间:2023-10-16

我在地址 http://www.parashift.com/c++-faq-lite/new/istream-and-while.html 阅读一些C++文本。

根据文本,我编写了以下代码:

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)

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

如果要在用户按 Enter 之前读取输入,则需要执行不同的操作。例如,您可以使用 getline 读取整行,然后将该行放入字符串流中并在 while-loop 中从中读取 - 或者您可以在读取每个值后使用 istream 类的 peek() 方法来检查流中的下一个字符是否是换行符。

您可以设置一个特殊值来退出循环。

例如:

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。

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

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

输入运算符在循环中将无限期地保持活动状态,直到它变得不真。从本质上讲,它希望将用户输入为整数。给定您的示例,您必须输入任何非整数才能使其计算结果为 false。

你不需要 while 循环。 cin >> value一次。