讨论while(condition)中condition为流对象时循环终止的情形
#include<iostream>
using namespace std;
int main(){
int sum=0,val=0;
while(cin>>val){
sum+=val;
}
cout<<sum<<endl;
return 0;
}
循环条件实际检测的是cin。
当我们使用一个istream对象作为条件时,其效果是检查流的状态。
如果流是有效的,即未遇到错误,那么检测成功。当遇到文件结束符,或遇到一个无效的输入时(例如此例中输入的值不是整数),istream类的对象会被视为无效。处于无效状态的istream对象会被视为为假。
讨论几个例子:
//输入 1 2 3 4end-of-file
//输出 10
//输入 1 2 3 4 5.5
//输出 15
//输入 1 2 3 4 a
//输出 10
例2中输入一个小数,先进行类型转换加到sum上,之后istream对象为假,结束循环;例3中输入字母,istream对象判断为假,结束循环。