Liu4Real 发表于 2020-2-10 16:05:06

突然被自加困惑,希望大佬解释

本帖最后由 Liu4Real 于 2020-2-10 16:53 编辑

#include<stdio.h>
int main()
{
int a=-2,b=0;
while(a++&&++b);
printf("%d,%d\n",a,b);
}

程序运行后输出结果是什么?

答案给的a=1,b=2,能详细解释一下吗谢谢!

Liu4Real 发表于 2020-2-10 16:06:42

我认为答案是a=0,b=3

qiuyouzhi 发表于 2020-2-10 16:20:38

Liu4Real 发表于 2020-2-10 16:06
我认为答案是a=0,b=3

请用代码格式发代码,我现在根本看不出缩进

一个账号 发表于 2020-2-10 16:24:19

qiuyouzhi 发表于 2020-2-10 16:20
请用代码格式发代码,我现在根本看不出缩进

不需要缩进的

qiuyouzhi 发表于 2020-2-10 16:31:17

我去全是中文标点符号
楼主你确定这能正确运行?
希望下次代码工整一点

一个账号 发表于 2020-2-10 16:32:34

本帖最后由 一个账号 于 2020-2-10 16:38 编辑

Liu4Real 发表于 2020-2-10 16:06
我认为答案是a=0,b=3
第一次循环 结束 a = -1, b = 1;
第二次循环开始时 a = -1,b =1;
第二次循环结束 a = 0, b = 2;
第三次循环开始 a = 0, b =2;
结果a=0了,while判断此时的a不满足条件了,然后a++开始执行,a = 1 因为条件不满足,循环体不会执行++b,所以b的值没有变化。

qiuyouzhi 发表于 2020-2-10 16:39:55

先弄懂a++和++a的区别
a++是先使用一次a,再加1
++a是先加1,再使用a

qiuyouzhi 发表于 2020-2-10 16:42:58

你可以把a++改成++a,看看效果,理解理解

Liu4Real 发表于 2020-2-10 16:54:08

qiuyouzhi 发表于 2020-2-10 16:20
请用代码格式发代码,我现在根本看不出缩进

改过了 不好意思

Liu4Real 发表于 2020-2-10 16:55:31

一个账号 发表于 2020-2-10 16:32
第一次循环 结束 a = -1, b = 1;
第二次循环开始时 a = -1,b =1;
第二次循环结束 a = 0, b = 2;


a++不是先使用一次a再自加的吗,那第一次循环结束不应该是a=-2,b=1吗?

qiuyouzhi 发表于 2020-2-10 16:57:53

因为0是False

Liu4Real 发表于 2020-2-10 16:58:38

一个账号 发表于 2020-2-10 16:32
第一次循环 结束 a = -1, b = 1;
第二次循环开始时 a = -1,b =1;
第二次循环结束 a = 0, b = 2;


a++不是先使用一次a再自加的吗,那第一次循环结束不应该是a=-2,b=1吗?

love_qj 发表于 2020-2-10 17:01:10

a++是先返回a的值,再自加;
++a是先自加,再返回加后的值。

Liu4Real 发表于 2020-2-10 17:20:29

love_qj 发表于 2020-2-10 17:01
a++是先返回a的值,再自加;
++a是先自加,再返回加后的值。

那在这道题里怎么解释呢,能具体一点吗 谢谢!

木头-1 发表于 2020-2-10 23:49:12

建议看一下,优先级

367 发表于 2020-2-11 10:38:28

本帖最后由 367 于 2020-2-11 10:41 编辑

#include<stdio.h>
int main()
{
int a=-2,b=0;
while(a++&&++b)
        printf("%d,%d\n",a,b);
printf("%d,%d\n",a,b);
}
运行结果:
-1,1
0,2
1,2

367 发表于 2020-2-11 10:46:03

367 发表于 2020-2-11 10:38
#include
int main()
{


第二次循环结束后a=0,b=2
进行第三次循环时,条件判断a=0意味着条件为假,结束
而此时a++先判断了a=0,后又++,即a=1
所以最后结果为a=1,b=2

Liu4Real 发表于 2020-2-11 15:22:49

367 发表于 2020-2-11 10:46
第二次循环结束后a=0,b=2
进行第三次循环时,条件判断a=0意味着条件为假,结束
而此时a++先判断了a=0 ...

明白了 谢谢!
页: [1]
查看完整版本: 突然被自加困惑,希望大佬解释