我想知道当 if(i%2) 它检查什么以继续时会发生什么。它错过了 == 但它打印出总和为 20?为什么?

I wonder whats happens when if(i%2) what does it checks to come to continue. It misses == but it prints out the sum as 20? Why?

#import <stdio.h>
int main(void) {
    int sum,i;
    sum = 0;
    for(i=0;i<10;i++) {
        if(i%2)
            continue;
        sum+=i;
    }
    printf("\n%d",sum);
    return 0;
}

if(i%2) 在上面的代码中是如何工作的?

这里使用的%称为modulo operator。它检查除法的余数。

关于 if 声明,C11 标准说,来自第 §6.8.4.1

Syntax : if ( expression ) statement

... the first sub-statement is executed if the expression compares unequal to 0.

所以,对于像 if(i%2) 这样的语句,结果

  • 为TRUE,当i值不是2的倍数,即产生非零余数,所以遇到continue;
  • 为 FALSE,当 i 可以被 2 整除时。因此,continue; 被跳过并且 sum+=i; 被执行。

也就是说,C里面没有#import <stdio.h>,应该是#include <stdio.h>

最后,

How does if(i%2) works in the above code?

用于将所有数相加,直到9。结果20打印出来。

In computing, the modulo operation finds the remainder after division of one number by another (sometimes called modulus).% is the modulus operator.

所以i%2returnsi除以2剩下的余数
因此如果我是奇数 i%2=1(TRUE)
否则为 0(FALSE).(偶数条件)

因此,如果 i 是偶数,则将 i 添加到 sum else 循环继续。

if语句中的条件

if ( i % 2 ) 

相当于

if ( i % 2 != 0 ) 

如果 i 是奇数,则此条件为真。 所以程序求 [0, 10 )

范围内的偶数之和

根据 C 标准(6.8.4.1 if 语句)

2 In both forms, the first substatement is executed if the expression compares unequal to 0.

这里"the first substatement"表示if语句(如果有else则为第二个子语句)

最好重写没有break语句的循环。例如

for ( i = 0; i < 10; i++ )
{
    if ( i % 2 == 0 ) sum += i;
}

相同
for ( i = 0; i < 10; i += 2 )
{
    sum += i;
}

如果条件只知道 TRUEFALSE

如果您的 modulo 操作产生 true 条件,那么它将执行 continue。否则它会求和。

**真实条件 = 任何不带零的数字 (0)