2017-01-06 2 views
0

グリッドに1と0を取り込みたいとします。 ランダム変数rのためにプログラムがクラッシュします。それは定数で完全に正常に動作します(例:r = 8)。私は使用しましたsrand(time(NULL));ランダム変数を使用してCプログラムがクラッシュする

void initGrid(int grid[GRID_HEIGHT][GRID_WIDTH]) 
{ 
    int i,j,r; 
    for(i=0;i<GRID_HEIGHT;i++) 
    { 
     r = rand()%10; 
     for(j=0;j<GRID_WIDTH;j++) 
     { 

      grid[i][j]= (i*j+i+j)%(r)<=2?1:0; 
     } 
    } 
} 
+2

? –

答えて

5

"0で除算"エラーがあります。

r = rand()%10; 

(i*j+i+j)%(r)弾性率のため0がエラーを引き起こしていることを用いよう0..9としてrの範囲を与えます。

私はあなたが0または1でそれを埋めるためにしたい場合、あなたはそれを変更することができませんでしたランド()は、グリッド要素を与えるようにそれが何を必要とせずに、直接値だあなたは

r = 1 + rand()%10; 
+0

さて、私はちょうど愚かだと感じます。ありがとう – xSooDx

1

を使用することをお勧め三元モジュラス操作?クラッシュで示されているどのようなメッセージも(i*j+i+j)%(r)によって引き起こさゼロ問題で除算を取り除くでしょう

void initGrid(int grid[GRID_HEIGHT][GRID_WIDTH]) 
{ 
    int i,j; 
    for(i=0;i<GRID_HEIGHT;i++) 
    { 
     for(j=0;j<GRID_WIDTH;j++) 
     { 

      grid[i][j]= rand()%2; 
     } 
    } 
} 

(彼の答えに天気ベーンで述べたように)

+2

あなたの解決策はおそらく0と1の同様の数の値を与えます。問題のメカニズムは、異なる分布を提供する。 rの値が高いほど、内側のループではより多くのフィールドが0になります。 – Gerhardh

+0

これは絶対に当てはまります。 –

関連する問題