首页 > 解决方案 > 如果条件包含 ++y vs y+=1

问题描述

这是以下代码:

int main () {
   int x = 3, y = 0 ;
   if(x >= 3 && y+=1){
     if(y<=5){
       printf("%d\n", ++x);
     } 
   }
   else{
     printf("%d\n", x++);
   }
   printf("x=%d, y=%d", x, y++);
   return 0;
}

它不起作用,并且y+=1是它的原因,我认为它的行为方式与我将其替换为++y(有效)相同。

为什么如果我用 ++y 替换 y+=1 代码可以工作?为什么 y+=1 导致代码失败?

标签: c

解决方案


问题是运算符优先级。+=的优先级低于&&,所以

if (x >= 3 && y += 1)

被解析为

if (((x >= 3) && y) += 1)

这是无效的,因为((x >= 3) && y)它不是可以递增的左值。

添加括号以覆盖它。

if (x >= 3 && (y+=1)){

推荐阅读