C语言 为什么外部for循环不能一次完成整个过程,而不是将控制传递给内部for循环

mrfwxfqh  于 2023-08-03  发布在  其他
关注(0)|答案(2)|浏览(77)

为什么外部for循环在第一个go中没有完成,而不是将控制传递给内部for循环,内部循环完全完成,然后返回外部for循环的先前值,如果我错了,请纠正我
下面是代码

//nested loop
#include <stdio.h>

int main() {
  int i, j;
  
  // Outer loop
  for (i = 1; i <= 2; ++i) {
    printf("Outer: %d\n", i);  // Executes 2 times
    
    // Inner loop
    for (j = 1; j <= 3; ++j) {
      printf(" Inner: %d\n", j);  // Executes 6 times (2 * 3)
    }
  }
  
  return 0;
}

字符串
我预料到了

Outer: 1
Outer: 2
Inner: 1
Inner: 2
Inner: 3

6yt4nkrj

6yt4nkrj1#

你混淆了顺序循环和嵌套循环。如果两个循环是顺序的(在同一级别,不嵌套),那么(1)第一个循环运行到完成,然后(2)第二个循环运行到完成。这就是你要找的行为。
但是当两个循环嵌套时,对于外部循环的每次迭代 *,内部循环从开始运行到结束。因此(1)外部循环的第一次迭代开始,(2)内部循环从开始运行到结束,(3)外部循环的第二次迭代开始,(4)内部循环从开始运行到结束,等等。内部循环的总迭代次数是外部循环的迭代次数乘以内部循环本身的迭代次数的乘积。

8e2ybdfx

8e2ybdfx2#

当for循环使其成为check i <= 2时,它将做以下两件事之一:

  • 如果检查失败(即计算结果为false),它将跳到与for循环的花括号相关联的花括号后面。
  • 如果检查通过(即求值为true),它将执行for循环的花括号内的所有指令,然后递增i并再次运行检查。

您的花括号包含以下内容:

printf("Outer: %d\n", i);  // Executes 2 times

// Inner loop
for (j = 1; j <= 3; ++j) {
  printf(" Inner: %d\n", j);  // Executes 6 times (2 * 3)
}

字符串
这意味着每次i小于或等于2时,它将在再次进行检查之前执行整个代码块。
为了得到你想要的输出,你不需要嵌套的for循环。相反,你想把内部的for循环移出去:

for (i = 1; i <= 2; ++i) {
    printf("Outer: %d\n", i);
}

for (j = 1; j <= 3; ++j) {
    printf(" Inner: %d\n", j);
}

相关问题