循环不起作用的基本多重条件
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 == 0
因 i = 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);
}
}
评估第二个条件。这是因为它被评估循环不迭代。
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
我目前正在学习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 == 0
因 i = 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);
}
}
评估第二个条件。这是因为它被评估循环不迭代。
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