当看《c++ primer》这本书的时候有这样一段示例代码
#include <iostream>
int main(){
int val,sum=0;
while(std::cin>>val){
sum+=val;
}
std::cout<<"the result is "<<sum<<std::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时,效果图如下:
当输入数字后故意输错时回车,效果图如下: