hanyf 发表于 2023-12-13 10:51:54

C语言

请问while(i--<=10)是怎么执行的?
是不是先判断i<=10是否成立,成立则i自减进入while循环,不成立则i自减但不进入循环呢?
如果是的话,不成立i为什么也要自减呢?
非常感谢!

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

浅露清唱 发表于 2023-12-13 17:18:51

本帖最后由 浅露清唱 于 2023-12-13 17:21 编辑

C语言执行代码从上到下从左到右,并根据代码进行动作例如数据的计算更新,所以会先进行内部自减再进行判断,自减后数据已经改变,后面不会造成影响。{:10_254:}

hanyf 发表于 2023-12-14 20:20:20

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

但是这样的话++i和i++不就没有区别了吗?但实际它们是有区别的呀

hanyf 发表于 2023-12-15 15:42:20

hanyf 发表于 2023-12-14 20:20
但是这样的话++i和i++不就没有区别了吗?但实际它们是有区别的呀

可以一起讨论一下吗?

浅露清唱 发表于 2023-12-30 09:38:14

hanyf 发表于 2023-12-15 15:42
可以一起讨论一下吗?

有些编译软件是会对其进行区分,先整体读取模块,再判断前/后进行区分先自加/先判断。但有些编译软件没有这个功能。

hanyf 发表于 2023-12-30 18:10:19

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

谢谢

xiaotubie 发表于 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) 你换个写法 改成>= 不就有用了

行客 发表于 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。
页: [1]
查看完整版本: C语言