C++ 为什么我必须在输入端输入一个非整数来结束程序? #包括 int main() { 整数和=0,值=0; //读取到文件末尾,计算读取的所有值的运行总数 而(标准::cin>>值) sum+=value;//相当于sum=sum+value std::cout

C++ 为什么我必须在输入端输入一个非整数来结束程序? #包括 int main() { 整数和=0,值=0; //读取到文件末尾,计算读取的所有值的运行总数 而(标准::cin>>值) sum+=value;//相当于sum=sum+value std::cout,c++,io,stdin,C++,Io,Stdin,while(std::cin>>值)将在没有输入(ctrl-D或流结束)或发生错误时结束。非整数的输入会产生错误,然后它会在while(std::cin>>值)时终止表示在std::cin>>值为真时继续运行。由于值是一个int,因此方便地说,如果您输入的值不能隐式转换为int,则该表达式将返回false。否则,它将继续运行。因为只要您键入integer,则cin>>value表达式的计算结果为true。如果键入非整数,表达式将失败,因为您将尝试将非整数放入int类型的变量int循环在std::

while(std::cin>>值)
将在没有输入(ctrl-D或流结束)或发生错误时结束。非整数的输入会产生错误,然后它会在
while(std::cin>>值)时终止
表示在
std::cin>>值
为真时继续运行。由于
是一个
int
,因此方便地说,如果您输入的值不能隐式转换为
int
,则该表达式将返回false。否则,它将继续运行。

因为只要您键入integer,则
cin>>value
表达式的计算结果为true。如果键入非整数,表达式将失败,因为您将尝试将非整数放入
int
类型的
变量
int

循环在
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
是在出现严重错误时设置的,例如。,磁盘已损坏。从流引用到布尔值的转换最终需要检查这些位是否都未设置。浮点数中的小数点会导致设置失败位,从而导致循环结束。

如果希望人们理解代码,您应该正确缩进代码。是
std::strea吗m
std::istream
更简洁的输入风格将允许用户输入任何内容(进入字符串),解析字符串中的数字并使用数字,并检测一些非数字输入,如“退出”、“退出”、“完成”、“停止”,等,然后理智地退出。哦,为什么不在给出无效条目时发出一个错误呢。我不太喜欢成语“cin>>variable”,因为输入处理是一维的。
#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;
}