私はC言語にとって非常に新しいです。私にはわからない小さな問題があります。私は、各列に6つの乱数を生成し、入力された行の値に従って繰り返す宝くじプログラムを作った。私が抱えている唯一の問題は、入力が高い場合でも9つの連続した行の後にプログラムが停止することです。条件(C)の前にループ停止のため
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[])
{
int KURE_SIZE = 50;
int ROWS = 0;
int i, j, a;
int lottery[ i ][ j ];
int kure[ KURE_SIZE ];
for(a = 1; a <= KURE_SIZE; ++a)
kure[a] = a;
printf("How many games do you want to play? (MAX.500) ");
scanf("%d", &ROWS);
printf("\n");
for(i = 0; i < ROWS; i++){
printf("Game %d :", i + 1);
srand ((unsigned int) time(NULL));
for(j = 0; j < 6; j++){
int x = 1 + rand() % KURE_SIZE;
lottery[ i ][ j ] = kure[ x ];
printf("%5d", lottery[ i ][ j ]);
kure[x] = kure[ KURE_SIZE-- ];
}
printf("\n");
}
printf("\n\n");
system("pause");
return 0;
}
この問題の原因は何か。私はそれが記憶上の問題かもしれないと思ったが、私は知らない。
私はいくつかの助けに感謝します。私はこのサイトと役に立つコミュニティが大好きです。
一つの指標として用いるため
が
に変更する必要があり、この文であります問題はループです: 'for(ia = 1; a <= KURE_SIZE; ++ a) kure [a] = a; ' 1つずつずれているエラーがあります。範囲外のインデックスKURE_SIZEでkureに書き込みます。 編集:配列を初期化しています: 'int lottery [i] [j];'はユニット化された値で、未定義の動作を引き起こします。 – jackarms
'int lottery [i] [j];' iとjは初期化されていません。 C言語では、使用する前にメモリを割り当てる必要があります。おそらく 'int宝くじ[500] [6]と書くことができますか?しかし、ユーザーが500を超える行をROWに入れないことを確認する必要があるので注意してください。 – Stargateur
乱数ジェネレータを一度だけシードする必要があります( 'srand'をすべてのループの上に移動してください) – yano