while(cin >> x)的说明
while循环中的cin
在学习C++的过程中,C++ Preimer Plus中经常出现while(cin >> x)
,为什么可以这么写?cin是一个输入流对象,cin >> x
单独使用时,返回结果也是一个cin对象(修改过的)。>>是运算符的重载,其函数原型istream& operator>> (istream& is, typename e);
,其中typename可以是char*,int等等。
那么在while(cin >> x >> y)
中,其返回值是什么?在while(cin >> x >> y)
执行情况如下:
- 第一个>>运算符从输入流对象cin中提取数据到x中并且返回已经修改过的cin
- 第二个>>运算符再从cin中提取数据到y中并且返回再次修改过的cin
- 最后会判断cin的流状态(good、fail、bad、eof),如果流状态为good则表达式
cin >> x >> y
返回true,满足while循环执行条件
有语句double x; while(cin >> x)
,如果实际输入的x与所需的类型不匹配,表达式会返回false,然后退出while循环。
int main()
{
double x;
std::cout << "Enter x(q to quit): ";
while(std::cin >> x) //当输入字符时退出循环,输入的类型与double不匹配
{
...
}
return 0;
}
参考: