#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;
}
这段代码如何知道何时完成获取输入值并显示总和?为什么只有输入非整数值才结束?
最佳答案
当 std::istream& operator>>(int)
计算结果为 false 时,循环结束。如果流已到达文件末尾或已被标记为错误,则会发生这种情况。输入 float 会导致后者发生。
详细信息:
每个流都包含一个指示流状态的位掩码。掩码中的位包括 eof 位、fail 位和 bad 位(std::ios_base::eofbit
、std::ios_base::failbit
和std::ios_base::badbit
)。第一个相当明显:它是在遇到 EOF 时设置的。接下来的两个有点棘手。 std::ios_base::failbit
当输入操作无法读取期望的字符,或者输出操作无法生成期望的字符时设置。 std::ios_base::badbit
在出现严重错误时设置,例如,您的磁盘被炸毁。从流引用到 bool 值的转换最终涉及检查这些位是否未设置。 float 中的小数点会导致失败位被设置,进而导致循环结束。
关于c++ - 为什么我必须在输入的末尾输入一个非整数才能结束程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19191056/