2

入れ子になった while ループを使用していたのですが、内側のループが 1 回しか実行されないため、問題が発生しました。実証するために、少しテスト コードを作成しました。

#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

外側のループの各反復でリセットしないためです。内側のループも 10 回実行する場合は、次の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 にリセットする必要があります。コードでそれを行うことはありません。外側のループで j を 0 に等しくします。

于 2013-05-16T17:52:46.570 に答える
1

内側のループが 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 に答える
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 に答える