我正在制作一个简单的程序,它的功能类似于热/冷猜谜游戏,带有随机生成的数字(输入猜测,告诉您更高或更低,重复直到猜到正确的数字。)我遇到了一些障碍随机数生成,我能创建的最佳解决方案是生成 1000 个随机数的数组。
第一次玩游戏时使用数组生成的第一个随机数,但是,在第一个游戏之后的任何时候都使用 4040 作为随机数,无论可能的随机数范围如何(对于正常难度设置)。我尝试以多种方式诊断问题,但我相信这个问题太难解决了,因为我的编程经验很少(我仍在学习我的第一门编程类(class)),所以任何帮助找出问题将不胜感激。
相关部分代码:
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 中的本地\全局变量,你似乎误解了它们是如何实现的。我建议首先构建一个没有函数的更简单的应用程序 - 调试起来会更简单,在理解逻辑后,您可以开始将代码部分导出到函数。希望这有帮助..
关于c - 随机数组在第一个元素之后给出无效输出 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49724596/