2016-12-30 8 views
-3

私は、ネストされたforループ内の乱数ジェネレータを使用して、指定された通りの各世帯の人数を生成するCを使用してプログラムを作成しようとしています。乱数を2D配列に割り当てる際にネストされたForループは終了しません。

これは本当に簡単なはずですが、データを配列の位置に割り当てるときにForループが停止しません。この部分を取り除くと、for-loopは通常通り終了します。

この1つは動作しますが、(私はポインタのテストを使用して、ループが停止しているかどうかを確認するために2をテストしています。)任意のデータを割り当てていません:

// populating the streets with kids 
// Streets then houses, we are assuming that each street is uniform in number of houses 
int KidsInStreet[9][24]; 
for(int o = 0; o <10; o++){ 
    printf("Testing %d\n", o); 
    for(int j = 0; j < 25; j++){ 
     // assign randnumber between 0 and 5 for no of kids 
     int r = rand() % 5; 
     // KidsInStreet[o][j] = r; 
     printf("Testing2 %d\n", j); 
    } 
} 

と私はデータを代入しようとすると、ループ

// populating the streets with kids 
// Streets then houses, we are assuming that each street is uniform in number of houses 
int KidsInStreet[9][24]; 
for(int o = 0; o <10; o++){ 
    printf("Testing %d\n", o); 
    for(int j = 0; j < 25; j++){ 
     // assign randnumber between 0 and 5 for no of kids 
     int r = rand() % 5; 
     KidsInStreet[o][j] = r; 
     printf("Testing2 %d\n", j); 
    } 
} 

なぜこの問題が起こっているのかわかりません。本当に問題ではないはずです。 は、任意のフィードバックをありがとうございました:)

+8

あなたのループは限界があります。索引付けの制限は 'KidsInStreet [9] [24];' 'KidsInStreet [8] [23] = r;'です。これは*未定義の動作なので*実際の動作は無関係です。 –

+6

配列インデックスの範囲はどのくらいですか? 9つの要素の配列の場合、有効なインデックス範囲は0〜8です(両端を含む)。あなたの外側のループは* 9 *になり、範囲外になり*未定義の動作*になります。 –

+0

配列は 'int KidsInStreet [10] [25]'として宣言しなければならないか、それに応じてループを変更する必要があります。 –

答えて

0

ように924は、要素の数ですint KidsInStreet[9][24]この行では、コメントで@WeatherVaneによって指摘。その行を変更

int KidsInStreet[10][25];への修正問題:

#include "stdio.h" 

int main(void) { 
    // Disable stdout buffering 
    setvbuf(stdout, NULL, _IONBF, 0); 

    printf("Hello World\n"); 
    int KidsInStreet[10][25]; 
    for(int o = 0; o <10; o++){ 
     printf("Testing %d\n", o); 
     for(int j = 0; j < 25; j++){ 
      // assign randnumber between 0 and 5 for no of kids 
      int r = rand() % 5; 
      KidsInStreet[o][j] = r; 
      printf("Testing2 o%d j%d\n",o, j); 
     } 
    } 
    return 0; 
} 

あなたがここにコードを試すことができます:あなたが範囲外の配列のインデックスを作成しているので、オフずつ、https://repl.it/EycD/1

関連する問題