为什么 (std::cin >> foo) 语法不起作用?
Why while (std::cin >> foo) syntax does not work?
我在地址 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
一次。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- EASTL矢量<向量<int>>连续的
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- 什么文件可以修改 atom 的C++语法?
- 创建模板嵌套类实例的语法?
- C++语法差异:二维和一维数组(指针算术)