Loading

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;
}

参考:

https://www.delftstack.com/howto/cpp/while-loop-cin-cpp/

https://cplusplus.com/forum/beginner/91641/#:~:text=Yes. It's not about what "cin returns"%2C it,converted to void* which gets converted to bool.

posted @ 2024-05-11 19:15  记录学习的Lyx  阅读(38)  评论(0编辑  收藏  举报