关于if语句里面的a++,a--问题

int a;

scanf("%d",&a);
if(a++<9) printf("%d\n",a);
else prinntf("%d\n",a--);
从键盘输入9<回车>,则输出结果是?
答案为什么是10?if条件不是不满足吗?应执行else语句的吧!所以输出结果为啥不是9?

a++ 的含义是先取a的值,再对a进行+1, 你输入9的时候,if(a++<9)这里系统是先取a的值,所以认为a=9,因此进入else语句,进入else语句后,对a进行加1, 之后执行printf语句,照样,printf语句先取走a的值,显示在了屏幕上,你看到的就是10了。但是别忘了是a--,这里的a会再-1,变为9,如果你再用个printf(“%d”,a); 就可以看到一个9了,追问

等等,else语句是a--,怎么是+1?是对a-1才对啊

追答

不好意思,刚才顺序打错了。。笔记本的鼠标有点坑爹。。 重新发一下 a++ 的含义是先取a的值,再对a进行+1, 你输入9的时候,if(a++<9)这里系统是先取a的值,所以if语句认为a=9, 但是别忘了if中是a++,所以if先把a的值拿去作比较,a的值再被加1,因此进入else语句的时候a的值为10,进入else语句后,执行printf语句,照样,printf语句先取走a的值,显示在了屏幕上,你看到的就是10了。但是别忘了是a--,这里的a会再-1,变为9,如果你再用个printf(“%d”,a); 就可以看到一个9了,

追问

你说的我懂,但我搞不明白,if语句不是不成立吗?所以不执行a++这句!

追答

if语句是用来做判断的,判断的依据就是括号里的内容,if语句是会执行括号里的所有内容,系统会读到if这条语句,并且根据括号内的内容判断是否执行if()后的内容,所以a++是执行的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-20
10是对的,if是先执行条件判断,也就是判断a<9 ,然后a++,
此时a == 10,然后执行 输出10,最后执行a--已经和输出无关。
记住++或者--都是先执行判断,然后再改变数值。追问

我的意思是if不满足条件,应该不执行才对啊

第2个回答  2013-09-20
因为a++<9不成立,所以跳到else,这是a=10,因为a++,又因为a--是先输出a的值再减1,所以就是10了
】i原值为5 x=++i;等价于i=i+1;x=i;两个语句,执行后i=6,x=6
x=i++;等价于x=i;i=i+1两个语句,结果为i=6,x=5.追问

这个我懂,我问的是if语句不是不成立吗?所以不执行a++这句

追答

但怎么不执行,a++在上一步,先执行的if(a++<9),语法是这样的,判断的时候就把a++给执行了,

第3个回答  2013-09-20
a 输入9
执行

if(a++<9) 后 a = 10 没错吧

其实执行的是else 语句
但是
prinntf("%d\n",a--);

相当于
{
prinntf("%d\n",a);

a--;

}

不行你改成
prinntf("%d\n",--a);
输出的就是9了追问

if不是不成立吗?干嘛还要执行a++?

追答

不是你理解的那样的
if(a++<9)
相当于
if(a<9);
a++
不管if如何 a++都是会执行的
这是语法规定的,在某些情况下会有用

第4个回答  2013-09-20
先自加,不满足,转到else,输出后自减
相似回答