鱼C论坛

 找回密码
 立即注册
查看: 1160|回复: 8

C语言

[复制链接]
发表于 2023-12-13 10:51:54 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
请问while(i--<=10)是怎么执行的?
是不是先判断i<=10是否成立,成立则i自减进入while循环,不成立则i自减但不进入循环呢?
如果是的话,不成立i为什么也要自减呢?
非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-13 10:52:21 | 显示全部楼层
这是一个很有趣的问题。在C语言中,`while`循环可以使用条件表达式来控制循环的执行次数。而`i--`这个表达式表示先使用i的值,然后再将i减1。

假设你有一个变量`i`,初始值为10。举个例子来说明:
int i = 10;while (i--) {  printf("%d ", i);}
这段代码会输出9、8、7、6、5、4、3、2、1、0。

原因是,首先`i`被使用,输出为9,然后`i`自动减1变为8,满足条件,继续执行循环体;再次使用`i`,输出为7,继续自减为6,以此类推,直到`i`的值变为0时,循环终止。

注意,这里`i--`是后置自减运算符。如果改成`--i`(前置自减运算符),则会先将`i`的值自减1,再使用`i`的值进行判断。所以如果改成`while(--i)`,上述示例中只会输出8、7、6、5、4、3、2、1、0,不会输出9。

希望解答了你的问题!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-13 17:18:51 | 显示全部楼层
本帖最后由 浅露清唱 于 2023-12-13 17:21 编辑

C语言执行代码从上到下从左到右,并根据代码进行动作例如数据的计算更新,所以会先进行内部自减再进行判断,自减后数据已经改变,后面不会造成影响。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-14 20:20:20 From FishC Mobile | 显示全部楼层
浅露清唱 发表于 2023-12-13 17:18
C语言执行代码从上到下从左到右,并根据代码进行动作例如数据的计算更新,所以会先进行内部自减再进行判断 ...

但是这样的话++i和i++不就没有区别了吗?但实际它们是有区别的呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-15 15:42:20 From FishC Mobile | 显示全部楼层
hanyf 发表于 2023-12-14 20:20
但是这样的话++i和i++不就没有区别了吗?但实际它们是有区别的呀

可以一起讨论一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-30 09:38:14 | 显示全部楼层
hanyf 发表于 2023-12-15 15:42
可以一起讨论一下吗?

有些编译软件是会对其进行区分,先整体读取模块,再判断前/后进行区分先自加/先判断。但有些编译软件没有这个功能。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 18:10:19 | 显示全部楼层
浅露清唱 发表于 2023-12-30 09:38
有些编译软件是会对其进行区分,先整体读取模块,再判断前/后进行区分先自加/先判断。但有些编译软件没有 ...

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

使用道具 举报

发表于 2024-1-7 16:00:13 | 显示全部楼层
本帖最后由 xiaotubie 于 2024-1-7 16:06 编辑

什么时候做自减,这个C语言是没规定的,因为不影响结果,这个类似你写 (a++)+(b++)  C语言没有规定先计算a++还是先计算b++, 反正对结果也没影响  
但是如果你写(a++)+(a++) 那就有问题了,这个是结果不确定

主要在于你的代码问题,这样的写法,导致自减没有用,如果i开始取<=10的数  那么导致无限循环,如果i>=11  直接不运行后面的循环体

while( i -- >=10) 你换个写法 改成>= 不就有用了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-7 20:56:11 | 显示全部楼层
while(i--<=10) 是一个 while 循环,其中 i 是循环变量,初始值为 10。循环条件是 i--<=10,这个条件的意思是先将 i 的值减 1,然后再判断 i 是否小于等于 10。

当 i--<=10 成立时,循环将继续执行,否则循环将终止。所以,while 循环会先判断 i 是否小于等于 10,如果成立,则执行循环体中的代码,否则不进入循环体,而是执行循环条件中的代码。

至于为什么 i 在循环条件中要自减 1,这是因为 i 每次循环都会自减 1,而 while 循环需要判断 i 是否小于等于 10,因此需要保证 i 的初始值是 10。如果 i 不是 10,那么在循环过程中,i 的值会逐渐减小,但在 while 循环中,仍然需要判断 i 是否小于等于 10,因此需要先将 i 减 1,以确保 i 的初始值是 10。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 03:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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