我正在制作一个简单的程序,它具有随机生成的数字(用作热/冷猜谜游戏)(输入一个猜测,告诉您更高或更低,重复直到猜到正确的数字为止。)我在随机数生成方面遇到了一些障碍,而我能创建的最佳解决方案是生成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变量,您似乎对如何实现这些变量有误解。我建议创建一个不带功能的简单应用程序-它将更容易调试,在您了解逻辑之后就可以开始将代码段导出到功能了。希望这可以帮助..

10-07 19:42
查看更多