我正在制作一个简单的程序,它具有随机生成的数字(用作热/冷猜谜游戏)(输入一个猜测,告诉您更高或更低,重复直到猜到正确的数字为止。)我在随机数生成方面遇到了一些障碍,而我能创建的最佳解决方案是生成1000个随机数的数组。
第一次玩游戏使用数组生成的第一个随机数,但是,在第一个游戏之后的任何时候,使用4040作为随机数,无论可能的随机数范围如何(正常难度下应为1-100)设置)。我已经尝试通过多种方式诊断问题,但是我认为,仅凭很少的编程经验(我仍在学习第一门编程课程),就很难解决该问题。找出问题将不胜感激。
代码的相关部分:
int main()
{
int randomArray[1000];
int randomNum;
int e=0; //element of each array
int input, score;
time_t t;
char level='n', mode;
//srand ( time(NULL) );
srand((unsigned) time(&t));
do
{
game();
}
while(level!='!');
return 0;
}
void game()
{
int randomArray[1000];
int randomNum;
int input;
char level;
printf("Chose difficulty (? for help, ! to quit): \n");
printf("Normal (N)\n");
printf("Medium (M)\n");
printf("Hard (H)\n");
printf("Impossible (I)\n");
scanf("%c", &level);
if(level=='N' || level=='n')
{
randomNum=rngNormal();
}
if(level=='M' || level=='m')
{
randomNum=rngMedium();
}
if(level=='H' || level=='h')
{
randomNum=rngHard();
}
if(level=='I' || level=='i')
{
randomNum=rngImpossible();
}
if(level=='?')
{
printf("Normal: generates random number from 1-100\nMedium: generates random number from 1-500\n");
printf("Hard generates random number from 1-1,000\nImpossible: generates random number from 1-32,767");
}
getche();
system("cls");
printf("RANDOM NUMBER: %d\n", randomNum);//added for testing purposes
input=load();
while(input!=randomNum)
{
compare(input, randomNum);
input=load();
}
compare(input, randomNum);
return 0;
}
int rngNormal()
{
int randomArray[1000];
int randomNum;
time_t t;
int e=0;
//generates random array
if(e==0)
{
for(int a=0; a<1000; a++)
{
randomArray[a]=rand()%100+1;
}
for(int x=0; x<1000; x++)//added for testing purposes
{
printf("%3d ", randomArray[x]);
}
}
randomNum=randomArray[e];
e++;
return randomNum;
}
最佳答案
您有很多问题,我将尝试列举一些问题:
每次在函数中定义int randomArray[1000];
时,都会多次定义它,您将创建该数组的本地副本-尽管它们共享相同的名称,但它们完全不相关
您从void
函数void game() ... return 0;
返回值level
不是全局值-因此,当您在game
中更改它时,它不会影响在main
中检查的值
我不理解使用randomArray[1000];
背后的任何逻辑-您可以生成一个随机数并猜测它的意义是什么-为什么您需要生成1000个呢?您没有以任何方式使用它们-e
是本地的,因此您从函数randomArray[0]
返回时间-其余部分在函数末尾被丢弃
我确实建议调试,检查C语言中的local \ global变量,您似乎对如何实现这些变量有误解。我建议创建一个不带功能的简单应用程序-它将更容易调试,在您了解逻辑之后就可以开始将代码段导出到功能了。希望这可以帮助..