2016-11-19 2 views
0

私は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; 
} 

この問題の原因は何か。私はそれが記憶上の問題かもしれないと思ったが、私は知らない。

私はいくつかの助けに感謝します。私はこのサイトと役に立つコミュニティが大好きです。

+2

一つの指標として用いるため

int x = 1 + rand() % KURE_SIZE; 

int x = rand() % KURE_SIZE; 

に変更する必要があり、この文であります問題はループです: 'for(ia = 1; a <= KURE_SIZE; ++ a) kure [a] = a; ' 1つずつずれているエラーがあります。範囲外のインデックスKURE_SIZEでkureに書き込みます。 編集:配列を初期化しています: 'int lottery [i] [j];'はユニット化された値で、未定義の動作を引き起こします。 – jackarms

+2

'int lottery [i] [j];' iとjは初期化されていません。 C言語では、使用する前にメモリを割り当てる必要があります。おそらく 'int宝くじ[500] [6]と書くことができますか?しかし、ユーザーが500を超える行をROWに入れないことを確認する必要があるので注意してください。 – Stargateur

+1

乱数ジェネレータを一度だけシードする必要があります( 'srand'をすべてのループの上に移動してください) – yano

答えて

1

変数ijが初期化されていないため、可変長配列

int lottery[ i ][ j ]; 

のこの定義は正しくありません。

はまた、このループは、配列を超えてメモリにアクセスしようとする試みがあっイア

for(a = 1; a <= `KURE_SIZE`; ++a) 
     kure[a] = a; 

無効です。この配列のインデックスの有効範囲は、このよう[0, KURE_SIZE-1]

変数xが配列kure

+0

範囲を変更しましたが、これは乱数の問題を引き起こし、初期化を試みました(i = 0、j = 0 right?)が、何も変更されません。私は言いましたが運がなかったものすべてを試しました。この問題の原因になるのは、私が6つのランダムな値の複製を防ぐために使用した方法でしょうか?私がそれを削除すると、それはずっと長く(最大63行)続きますが、まだ入力したままではありません。 – thefrogking

+0

@thefrogking私が書いたように、配列の宝くじを正しく定義する必要があります –

+0

申し訳ありませんが、配列を正しく定義することでちょっと混乱します。 – thefrogking

関連する問題