×

C语言 C语言学习随笔 初始C语言 C语言实例小程序

C语言学习随笔:猜数字游戏

一哥 一哥 发表于2022-10-25 23:13:36 浏览2601 评论0

抢沙发发表评论

程序要求:

1、自动产生一个1-200之间的随机数字

2、猜对了:恭喜,猜对了! ->游戏结束;猜错了:提示猜大了/猜小了 ->游戏继续

3、游戏可以一直玩,除非退出游戏。


程序代码:

//头文件
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//菜单打印函数
void guess_num_menu()
{
    printf("************************************************************************\n");
    printf("************************************************************************\n");
    printf("**************************     1.开始游戏     **************************\n");
    printf("**************************     0.退出游戏     **************************\n");
    printf("************************************************************************\n");
    printf("************************************************************************\n");
}

//猜数字函数
void guess_num_game()
{
    int guess_num = 0;
    int random_num = (rand() % 200) + 1;  //生成随机数0-200,+1后范围即为1-200
    while (1)
    {
        printf("请输入猜测数字:>");
        scanf("%d", &guess_num);
        if (guess_num < random_num)
        {
            printf("猜小了,继续加油!\n");
        }
        else if (guess_num > random_num)
        {
            printf("猜大了,继续努力!\n");
        }
        else
        {
            printf("恭喜,猜对了!\n");
            break;
        }
    }
}

//主函数
int main()
{
    int option_num = 0;
    srand((unsigned int)time(NULL));
    //这里不需要使用time的返回函数,所以这里time(NULL) ->>即返回空值
    //time的类型为time_t,而srand的返回类型为unsigned int。因此将time类型强制转换为“unsigned int”
    guess_num_menu();
    do
    {
        printf("请选择:>");
        scanf("%d", &option_num);
        switch (option_num)
        {
        case 1:
            guess_num_game();
            break;
        case 0:
            printf("游戏退出成功!\n");
            break;
        default:
            printf("输入错误,请重新输入!\n");
            break;
        }
    }while (option_num);
    return 0;
}


程序分析:

1、由于程序要求产生一个1-200的随机数字。因此我们使用一个可以生成随机数的函数rand,rand函数可以生成一个0-RAND_MAX(即0-32767)之间的数字(rand需要调用stdlib.h头文件)

2、rand函数要求,在调用rand之前需要使用srand(随机数发生器初始化函数)为生成一系列伪随机数设置一个起点。

3、当srand的形参为固定值时,产生的随机数是不会变化的。例如设置为:srand(100),这时不管什么时候,程序生成的随机数都是固定的。因此srand的形参需要是一个会变的量。

4、因此我们给srand传入一个会发生变化的值:时间戳->使用库函数time()

5、之所有把srand放到主函数内,而不是放到猜游戏的函数内。是因为srand放到猜游戏函数内的话,时间戳是一直在变化的。那每猜一次数字,都会给rand重新设置一个起点。这样每猜一次都会生成一个随机数,那这样随机数是一直在变化的,永远都不可能猜对。

6、程序要求游戏一直能玩,因此do...while()循环的while()形参设置成游戏的选项部分。当选择“退出游戏”时,会传入一个0给while。0为假,就可以退出循环。反之,非0为真,则循环一直在运行,游戏就可以一直玩。

少长咸集

群贤毕至

访客