鱼C论坛

 找回密码
 立即注册
查看: 1514|回复: 17

[已解决]突然被自加困惑,希望大佬解释

[复制链接]
发表于 2020-2-10 16:05:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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,能详细解释一下吗谢谢!
最佳答案
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-10 16:06:42 | 显示全部楼层
我认为答案是a=0,b=3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 16:20:38 | 显示全部楼层
Liu4Real 发表于 2020-2-10 16:06
我认为答案是a=0,b=3

请用代码格式发代码,我现在根本看不出缩进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 16:24:19 | 显示全部楼层
qiuyouzhi 发表于 2020-2-10 16:20
请用代码格式发代码,我现在根本看不出缩进


不需要缩进的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 16:31:17 | 显示全部楼层
我去全是中文标点符号
楼主你确定这能正确运行?
希望下次代码工整一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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的值没有变化。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-10 16:39:55 | 显示全部楼层
先弄懂a++和++a的区别
a++是先使用一次a,再加1
++a是先加1,再使用a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 16:42:58 | 显示全部楼层
你可以把a++改成++a,看看效果,理解理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-10 16:54:08 | 显示全部楼层
qiuyouzhi 发表于 2020-2-10 16:20
请用代码格式发代码,我现在根本看不出缩进

改过了 不好意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 16:57:53 | 显示全部楼层
因为0是False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 17:01:10 | 显示全部楼层
a++是先返回a的值,再自加;
++a是先自加,再返回加后的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-10 17:20:29 | 显示全部楼层
love_qj 发表于 2020-2-10 17:01
a++是先返回a的值,再自加;
++a是先自加,再返回加后的值。

那在这道题里怎么解释呢,能具体一点吗 谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 23:49:12 | 显示全部楼层
建议看一下,优先级
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 15:22:49 | 显示全部楼层
367 发表于 2020-2-11 10:46
第二次循环结束后a=0,b=2
进行第三次循环时,条件判断a=0意味着条件为假,结束
而此时a++先判断了a=0 ...

明白了 谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 05:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表