为什么加入cout<<x或者cout<<“x”后,程序就变成死循环了?

#include <iostream>
using namespace std;
int main()
{
int x=3;
int i;
do{
x-=2;
cout<<x;
}while(!(--x),cout<<x);
return 0;
}
在while语句中,如果写成while(!(--x));程序是可以ok的,但是加入cout<<x或者cout<<“x”后,程序就变成死循环了,为什么?

噜噜哒
浏览 295回答 2
2回答

慕斯王

cout cin这些输入流的函数自己是有返回值的while(!(--x),cout<<x) 你这样写,那么while括号里面的循环条件就成了一个逗号表达式,这个逗号表达式的值就是cout<<x的返回值,而不是!(--x)的值,而且cout<<x的返回值不是0,所以循环条件始终为真,那就死循环了。在你的这个程序里面cout<<x的返回值是-30,你可以自己编译cout<<(cout<<x);看看他值是多少。

汪汪一只猫

逗号运算符返回的是它的最后一个表达式,所以!(--x), cout<<x 返回的是cout的值而!(--x)的返回值就被忽略了。
打开App,查看更多内容
随时随地看视频慕课网APP