#include <iostream>
int main()
{
int sum = 0, value = 0;
// read until end-of-file, calculating a running total of all values read
while (std::cin >> value)
sum += value; // equivalent to sum = sum + value
std::cout << "Sum is: " << sum << std::endl;
return 0;
}
此代码如何知道何时完成抓取输入值和显示总和?为什么它只在我输入非整数值时结束?
答案 0 :(得分:4)
当std::istream& operator>>(int)
评估为false时,您的循环结束。如果流已命中文件末尾或已标记为错误,则会发生这种情况。输入浮点数会导致后者发生。
<强>详情:
每个流都包含一个指示流状态的位掩码。掩码中的位包括eof位,失败位和坏位(std::ios_base::eofbit
,std::ios_base::failbit
和std::ios_base::badbit
)。第一个是相当明显的:它是在击中EOF时开始的。接下来的两个有点棘手。当输入操作无法读取预期字符或输出操作无法生成所需字符时,将设置std::ios_base::failbit
。当出现问题时会设置std::ios_base::badbit
,例如,您的磁盘已被炸毁。从流引用到布尔值的转换最终涉及检查是否未设置这些位。浮点数中的小数点会导致设置失败位,从而导致循环结束。
答案 1 :(得分:1)
因为只要输入整数,cin >> value
表达式的计算结果为true。如果键入非整数,则表达式将失败,因为您尝试将非整数放入value
类型的int
变量中。
答案 2 :(得分:0)
while (std::cin >> value)
将结束。输入非整数会产生错误,然后它会终止while
答案 3 :(得分:0)
行while (std::cin >> value)
表示在std::cin >> value
为真时继续运行。方便的是,由于value
是int
,如果输入的值不能隐式转换为int
,那么该表达式将返回false。否则,它会继续前进。