while循环嵌套在while循环中

时间:2013-05-16 17:48:55

标签: c while-loop

我使用的是嵌套的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次?我该怎么做才能解决它?

7 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:3)

因为在外循环的每次迭代中都没有重置它。如果你想让内循环运行十次,那么将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++;
}

答案 2 :(得分:1)

内循环完成后,您需要将值j重新设置为0

答案 3 :(得分: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++;
  }
}

答案 4 :(得分:1)

您需要将j重置为0.您的代码中不会执行此操作。在外部循环中使j等于0.

答案 5 :(得分: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);
    }
} 

它还使代码看起来更清晰。

答案 6 :(得分:0)

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