2

我正在使用嵌套的 while 循环,但遇到了问题,因为内部循环只运行一次。为了演示,我做了一些测试代码。

#include <stdio.h>
int main(){
  int i = 0;
  int j = 0;
  while(i < 10){
    printf("i:%d\n", i);
    while(j < 10){
      printf("j:%d\n", j);
      j++;
    }
  i++;
  }
}

这将返回:

i:0
j:0
j:1
j:2
j:3
j:4
j:5
j:6
j:7
j:8
j:9
i:1
i:2
i:3
i:4
i:5
i:6
i:7
i:8
i:9

谁能解释为什么嵌套循环不执行 10 次?我能做些什么来解决它?

4

7 回答 7

12

您永远不会重置jto的值0,因此,您的内部循环条件在第一次运行后永远不会为真。j = 0;之后在外循环中分配应该修复它。

于 2013-05-16T17:51:05.317 回答
4

因为您不会在外循环的每次迭代中重置它。如果您也希望内循环运行十次,请将j变量的初始化放在外循环内,如下所示:

int i = 0;
while (i < 10) {
    printf("i:%d\n", i);
    int j = 0;
    while (j < 10) {
        printf("j:%d\n", j);
        j++;
    }
    i++;
}
于 2013-05-16T17:51:38.977 回答
1

j您需要0在内部循环完成后重新设置该值。

于 2013-05-16T17:51:28.413 回答
1

j 需要在循环内初始化为0。

#include <stdio.h>
int main(){
  int i = 0;
  int j = 0;
  while(i < 10){
    printf("i:%d\n", i);
    j = 0 ; // initialization
    while(j < 10){
      printf("j:%d\n", j);
      j++;
    }
  i++;
  }
}
于 2013-05-16T17:51:38.453 回答
1

您需要将 j 重置为 0。您永远不会在您的代码中这样做 在您的外部循环中使 j 等于 0。

于 2013-05-16T17:52:46.570 回答
1

您的内部循环只执行一次的原因是因为您在循环外将 j 初始化为 0 ,然后再也不会重置它。第一次运行后,j 的值为 10。它永远不会再小于 10。

更好的方法是使用for循环:

for (int i = 0; i < 10; i++){
    printf("i:%i\n", i);
    for (int j = 0; j < 10; j++){
        printf("j:%i\n", j);
    }
} 

它还使代码看起来更干净。

于 2013-05-16T17:58:27.043 回答
0

您永远不会将 j 的值重置为 0,因此,您的内部循环条件在第一次运行后永远不会为真。分配 j = 0; 之后在外循环中应该修复它。

于 2017-02-07T12:05:02.263 回答