c - 随机数组在第一个元素之后给出无效输出 [C]

标签 c arrays random

我正在制作一个简单的程序,它的功能类似于热/冷猜谜游戏,带有随机生成的数字(输入猜测,告诉您更高或更低,重复直到猜到正确的数字。)我遇到了一些障碍随机数生成,我能创建的最佳解决方案是生成 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;
}

最佳答案

您有很多问题,我会尝试列出一些:

  1. int randomArray[1000]; 被定义多次,每次在函数中定义它时,您都会创建该数组的本地副本 - 尽管它们共享相同的名称,但它们完全不相关<
  2. 您从 void 函数返回一个值 void game() ... return 0;
  3. level 不是全局值 - 因此,当您在 game 中更改它时,它不会影响 main 中检查的值
  4. >
  5. 我无法理解使用 randomArray[1000]; 背后的任何逻辑 - 你可以生成一个随机数并猜测它有什么意义 - 为什么你需要生成 1000他们当中?您没有以任何方式使用它们 - e 是本地的,因此您每次都从函数 randomArray[0] 返回 - 其余的在函数结束时被丢弃

我确实建议调试,检查 C 中的本地\全局变量,你似乎误解了它们是如何实现的。我建议首先构建一个没有函数的更简单的应用程序 - 调试起来会更简单,在理解逻辑后,您可以开始将代码部分导出到函数。希望这有帮助..

关于c - 随机数组在第一个元素之后给出无效输出 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49724596/

相关文章:

c - 按位数组错误

C 客户端/服务器套接字错误

c - ppm 文件的基本文件 I/O

java - 如何使用Java在数据库中存储日期数组?

c++ - 使用 packet_mmap 的 RX/TX 是否需要拷贝?

javascript - 如何按类查找元素数并在悬停时计算?

javascript - 将逗号分隔的字符串转换为数组

python - 对 x-y 轴上时间 'n= 1000 steps' 为 't=1' 的一维随机游走进行采样

algorithm - 1到7的随机数生成

php - facebook用户ID的数据类型是什么