这两种代码有什么区别?我不知道,即使他们输出不同的值

What is the difference between these two types of code? I can't tell even though they output different values

我在一个网站 (https://www.learn-c.org/en/While_loops) 上解决了一个问题,该网站侧重于教授 C 语言的基础知识。当我应该解决这个问题时,我认为这很容易,而且我立刻想到了答案。然而,事实证明这是错误的。

这是我的方法。它给出了这个输出:7 5 9 5 6

#include <stdio.h>

int main() {
int array[] = {1, 7, 4, 5, 9, 3, 5, 11, 6, 3, 4};
int i = 0;

while (i < 10) {
    i++;
    if(array[i]<5||array[i]>10)
        continue;

    printf("%d\n", array[i]);

}

return 0;
}

这就是解决方案。给出了这个输出:7 5 9 5

#include <stdio.h>

int main() {
int array[] = {1, 7, 4, 5, 9, 3, 5, 11, 6, 3, 4};
int i = 0;

while (i < 10) {
    if(array[i] < 5){
        i++;
        continue;
    }

    if(array[i] > 10){
        break;
    }

    printf("%d\n", array[i]);
    i++;
}

return 0;
}

我到处寻找我能想到的答案,但我似乎无法理解我的解决方案与提供的解决方案之间的区别。

提供的解决方案输出:7 5 9 5

我的解决方案输出:7 5 9 5 6

区别在于break语句。

在您的代码中,循环一直执行直到满足 i < 10 条件(有效地遍历数字 1、7、4、5、9、3、5、11、6、3 并跳过最后一个)。 在此代码中,将打印前面提到的数字中 5 到 9 之间的数字。

在答案代码中,循环STOPS 当满足中断条件时,即达到数字11 时。如果继续下去,答案还是一样。

第一个区别:输入后将 i 增加一:第 8 行 (i++)。 所以你从数组中的第二个值开始;这对输出没有影响,但差异很大。

其次 break 完全按照练习要求进行:如果值大于 10,则不应打印它 并且 停止循环。中断退出围绕它的循环,从而满足要求。 break 退出外循环并继续循环后的下一行 (return 0) 所以即使 while 循环中的条件是 (i<1000) 带有 break 的代码的输出也是相同的。 在提供的情况下,while 循环运行 8 次,因为 11 在循环中的索引 8 处,但通常 break 与循环执行的次数无关,它仅取决于需要的条件为真(if 语句)执行它。

第三:你被要求使用两个 if 语句,而你只使用一个检查两个条件的语句。

第四,您更改了提供的代码,该代码在 printf 之后包含一个 i++,但您的代码中没有。