jkLoliTA 发表于 2022-10-15 16:04:21

while循环 结合 i++ 结合判断 语句的执行规则

本帖最后由 jkLoliTA 于 2022-10-15 16:38 编辑

while(i++ != 0){
   //语句
}
想请教一下括号内语句的执行顺序
理论上运算符优先级 ++ > !=并且两者的结合性都为 ->左到右
为何运算结果却是先执行判断
(不好意思哈各位大佬,新人只有这么点鱼币,给不了更多了)
{:10_266:}
(题目原型是S1E22动动手第0题的while(*target++ != '\0')

我的问题是:
while(i++ != 0)
为什么先判断 i != 0 是否为真,
再i = i +1

小伤口 发表于 2022-10-15 16:04:22

jkLoliTA 发表于 2022-10-15 16:37
嗯感谢,但我其实想请教一下这么执行的原因(即这句话的执行顺序为什么是这样的)

i++是要语句执行完之后才会自增
例如:
#include <stdio.h>

int main()
{
   int i=0;
   printf("%d",i++);
   
   return 0;
}

运行结果:
0
++i才会语句执行玩之前就完成自增
#include <stdio.h>

int main()
{
   int i=0;
   printf("%d",++i);
   
   return 0;
}

运行结果:
1

所以把代码改成++i就是你想要的结果啦{:9_227:}
#include <stdio.h>

int main()
{
   int i=0;
   while(++i != 0){
   //语句
           printf("你好");
   }
   
   return 0;
}

jackz007 发表于 2022-10-15 16:27:55

      先判断 i 是否不等于 0,同时,执行 i = i + 1,然后,才根据判断结果决定是否继续循环。

jkLoliTA 发表于 2022-10-15 16:37:35

jackz007 发表于 2022-10-15 16:27
先判断 i 是否不等于 0,同时,执行 i = i + 1,然后,才根据判断结果决定是否继续循环。

嗯感谢,但我其实想请教一下这么执行的原因(即这句话的执行顺序为什么是这样的)

jackz007 发表于 2022-10-15 16:55:41

本帖最后由 jackz007 于 2022-10-15 16:57 编辑

jkLoliTA 发表于 2022-10-15 16:37
嗯感谢,但我其实想请教一下这么执行的原因(即这句话的执行顺序为什么是这样的)

   没有原因,C 语言设计者就是这样安排的,变量的自增自减本身就是这么设计和操作的。

fcage 发表于 2022-10-15 17:00:18

++是自增运算符,但是++i和i++是不同的。
i++是先用再加,就是说程序先以i你来做运算,整个表达式运算完了,最后再进行i =i+1的操作;
++i是先加再用,也就是程序先运行i=i+1,之后再以新的i值进行运算。

++放在变量的左右效果是不同的,这是标准定义的。

jkLoliTA 发表于 2022-10-15 17:20:08

fcage 发表于 2022-10-15 17:00
++是自增运算符,但是++i和i++是不同的。
i++是先用再加,就是说程序先以i你来做运算,整个表达式运算完了 ...

好的,感谢感谢
页: [1]
查看完整版本: while循环 结合 i++ 结合判断 语句的执行规则