循环不起作用的基本多重条件

Basic multiple conditions for loop not working

我目前正在学习C,但我遇到了一个我无法解决的问题。 这真的很简单,我想要打印从 1 到 20 的数字,但前提是它们是偶数(意味着输出将是 2、4、6 ......)。我知道如何做到这一点,但问题是我想以将两个条件放在 for 循环中的方式来做到这一点:

int main() { 
    
    for (int i = 1;  i<=20 && i%2 == 0 ; i++) {
        printf("%d\n", i);
    }
    return 0;
}

似乎没有评估第二个条件,而且它导致程序不打印任何东西。我该怎么做?

条件一失败,循环就停止。由于 i%2 == 0i = 1 失败,循环立即停止。

您需要将偶数检查放在循环中,而不是在 for 条件中。

int main() { 
    
    for (int i = 1; i<=20; i++) {
        if (i % 2 == 0) {
            printf("%d\n", i);
        }
    }
    return 0;
}

两个条件都被评估——这就是为什么循环永远不会进行的原因,事实上。当 for 启动时,它将 i 设置为 1,并立即执行循环终止检查:1<=20 && 1%2==0。这减少到 true && false,最后减少到 false。所以 for 循环不会做任何其他事情:第一次检查失败。

记住:for循环中的条件检查失败终止循环

相反,您需要写下您的意思 - 它会更具可读性并且也能发挥作用!你说:

I want the numbers from 1 to 20 printed but only if they're even

直接转换为 C(不需要 return):

#include <stdio.h>
int main() {
    // for all numbers from 1 to 20
    for (int i = 1; i<=20; i++) {
        // print out only those that are even
        if ((i%2) == 0) printf("%d\n", i);
    }
}

你可以try this out online!.

评估第二个条件。这是因为它被评估循环不迭代。

i 的初始值等于 1。因此子表达式 i%2 == 0 的计算结果为 false。

您可以在循环中使用 if 语句,例如

for (int i = 1;  i<=20; i++) {
    if ( i % 2 == 0 ) printf("%d\n", i);
}

如果您想将表达式 i % 2 == 0 放在循环的条件中,则循环可以按照以下方式查找,如演示程序中所示

#include <stdio.h>

int main(void) 
{
    for ( int i = 1;  ( i % 2 == 0 ? i : ++i ) <= 20; i++) {
        printf("%d\n", i);
    }

    return 0;
}

程序输出为

2
4
6
8
10
12
14
16
18
20