我是C语言的新手。我有一个小问题,我无法弄清楚。我做了一个抽奖程序,它为每列产生6个随机数,并根据输入的行值重复。我遇到的唯一问题是,即使输入较高,程序也会在9次成功后停止。
#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;
}
这个问题可能是什么原因?我认为这可能是一个记忆问题,但我不知道。
我会感激一些帮助。我喜欢这个网站和乐于助人的社区。 p>
答案 0 :(得分:1)
可变长度数组的定义
int lottery[ i ][ j ];
不正确,因为变量i
和j
未初始化。
此循环也无效
for( a = 1; a <= `KURE_SIZE`; ++a )
kure[a] = a;
我试图访问数组之外的内存。此数组的有效索引范围是[0, KURE_SIZE-1]
因此这句话
int x = 1 + rand() % KURE_SIZE;
必须更改为
int x = rand() % KURE_SIZE;
因为变量x
用作数组kure