猜数字小游戏与随机数生成

写一个猜数字游戏

1.自动产生一个1-100的随机数

2.玩家猜数字

a.猜对了,就恭喜你,游戏结束

b.猜错了,会告诉你猜大了或猜小了,继续猜,知道猜对

3.游戏可以一直玩下去,除非退出游戏

#include
#include
#include
void menu()
{
    printf("*****************************************\n"); 
    printf("************ 1. play ********************\n");
    printf("************ 0. exit ********************\n");
    printf("*****************************************\n");    
}
void game()
{
    //猜数字游戏的实现
    //1.生成随机数
    int ret = rand() % 100 + 1;  //ranf函数返回一个0-32767之间的数
    // %100的余数是0-99,然后+1,范围就是1-100
    //2.猜数字
    int guess = 0;
    while (1)
    {
        printf("请猜数字:");
        scanf_s("%d", &guess);
        if (guess < ret)
        {
            printf("猜小了\n");
        }
        else if (guess > ret)
        {
            printf("猜大了\n");
        }
        else
        {
            printf("恭喜你猜对了!\n");
            break;
        }
    }
}
int main()
{
    int input = 0;
    srand((unsigned int)time(NULL));  //传递一个随机数字,例如时间戳,电脑上一个时间会返回一个时间戳,NULL是空指针
    do
    {
        menu();  //打印菜单
        printf("请选择:");
        scanf_s("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择\n");
            break;
        }
    } while (input);
    return 0;
}

关于输出一个随机数:

#include
#include
#include
#include
int main()
{
    while (1)
    {
        srand((unsigned int)time(NULL)); 
        int ret = rand();  
        printf("%d\n", ret);
        Sleep(2000);
    }
    return 0;
}

通过每次时间戳返回一个不一样的值,但是会发现得到的值是一个近似为递增的数列,而不完全随机

猜数字小游戏与随机数生成_第1张图片

因为时间是递增的,所以时间戳也是递增的

所以scand函数必须写在while循环的前面,但当我们取一定范围之间的数时,运用去模的方式:

例如1-100 只需%100+1即可

       66-100 要先%35再+32才行

#include
#include
#include
#include
int main()
{
    srand((unsigned int)time(NULL)); 
    while (1)
    {
        int ret = rand() % 100 + 1;  //输出1-100之间的随机数
        printf("%d\n", ret);
        Sleep(1000);
    }
    return 0;
}

结果很理想,十分的随机

猜数字小游戏与随机数生成_第2张图片

但是,为什么scand函数写在循环里面就会生成不随机的随机数,放在外面就会生成真正的随机数呢?值得我进一步思考…… 

你可能感兴趣的:(C语言学习,c++)