结束while(cin >> value)

当看《c++ primer》这本书的时候有这样一段示例代码

#include 
int main(){
    int val,sum=0;
    while(std::cin>>val){
        sum+=val;
    }
    std::cout<<"the result is "<::endl;
    return 0;
}

当自己在终端调试的时候输入数字并多次回车始终无法结束while循环,看到后来才明白了原因。


原因 1


  • what is cin
    cin是istream类型的对象,这个对象也被称为标准输入。
  • what is >>
    >>为输入运算符
    • 左侧参数:istream对象
    • 右侧参数:任意对象
    • 返回值:返回istream对象
    • 作用:它从给定的istream读入数据,并存入给定的对象中
  • 分析std::cin >> value
    此表达式从标准输入读取下一个数,保存在value中,输入运算符返回其左侧运算对象,在这个示例中是std::cin.因此,此循环实际上检测的是std::cin。
    当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果流是有效的,即流未遇到错误,那么检测成功。当遇到文件结束符,或遇到一个无效输入时,istream对象的状态会变成无效。处于无效的istream对象为使条件为假。因此,while循环一直会执行,直到遇到文件结束符或者错误。

小提示:windows下的输入文件结束符为Ctrl+Z,Unix和Linux下一般是Ctrl+D

执行效果

本人测试环境为linux
当输入数字后按Ctrl+Z时,效果图如下:
当输入数字后按Ctrl+Z时
当输入数字后故意输错时回车,效果图如下:
当输入数字后故意输错时回车


  1. 《c++ primer 》 ↩

你可能感兴趣的:(c++)