三.C语言练习(3)

12.猜数字游戏

游戏玩法:游戏开始,计算机会生成一个数字,玩家随机输入一个数字(1~100),计算机会根据玩家输入的数字和要猜测的数字之间的关系,提供一些信息来进行提示,以缩小猜测范围

基本思路:

  1. 生成一个随机数

  2. 猜数字


#include <stdio.h>
#include <stdlib.h>//使用rand()函数、srand()函数需要引用
#include <time.h>//使用time.h函数需要引用
void menu()
{
    printf("****************************\n");
    printf("***** 1.play   0.exit ******\n");
    printf("****************************\n");
}
    //写一个函数制定游戏规则
    void game()
    {
        //1.生成一个随机数
        int ret = 0;
        int guess = 0;//接收猜测的数字
        //拿时间戳来设置随机数的生成起点
        //时间戳:当前计算机的时间-计算机的起始时间(1970.1.1.0:0:0)
        ret = rand() % 100 + 1;//生成1~100之间的数
        //2.猜数字
        while (1)//设定猜中继续猜
        {
            printf("请猜数字(1~100):>");
            scanf("%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));
        //srand设置的随机数生成起点,在整个代码里设置一次就可以了
        //所以把这个语句从menu函数中拿出来,放到主函数中,整个工程就调用一次即可
        do
        {
            menu();//调用menu函数
            printf("请选择>:");
            scanf("%d", &input);
            switch (input)
            {
            case 1:
                game();//输入1后调用game函数,开始游戏
                break;
            case 0:
                printf("退出游戏\n");
                break;
            default:
                printf("选择错误\n");
            }
        } while (input);//输入0后,推出程序,否则再循环一次
        return 0;
    }

rand()函数

  • 一个生成随机数的函数,头文件时stdlib.h

rand函数会返回一个随机整数,这个整数的范围在0~RAND_MAX(0x7fff);0x代表十六进制, 转换成十进制就是32767

  • 调用rand之前要先调用srand——设定一个随机起点;

srand(); 括号内需要是整型

若括号内输入1,rand将一直生成41,无法达成随机的效果,所以往srand中输入一个会变化的数

而时间戳满足这一点

  • time函数——用于获取系统的时间

  • time的参数类型是time_t,编译器中转到定义可以发现time_t是对_time32_t的重命名,而_time32_t是对long的重命名,即long int长整型

而srand的参数刚好需要整型(无符号整型,所以还是要强制类型转换一下)

  • srand(unsigned int seed);

所以将time函数的返回值的类型强制转化成unsigned int

  • time(time t*timer);

括号内是一个指针,这里我们往里面放NULL,所以最终写成srand((unsigned int)time(NULL));

  • NULL是空指针

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

goto语句

C语言中提供了可以滥用的goto语句和标记跳转的符号,理论上goto语句是没有必要的,实践中没有goto语句也可以轻易写出代码

-- -- -- -- -- -- -- -- -- --


#include <stdio.h>
int main()
{
printf("hello world\n");
goto again;
printf("你好\n");
again:
printf("再见\n");
return 0;
}

运行结果:

hello world

再见

  • goto语句会打乱程序原有执行节奏,建议少用

-- -- -- -- -- -- -- -- --

但这样并不是意味着goto语句一无是处。goto可以一次性跳出多层循环,而break就不行,break一次只能跳出一层循环,从而达到终止程序在某些深度嵌套的结构的处理过程


for(...)
    for(...)
        for(...)
            if(diaster)
                goto error;
                }
            }
        ...
   }

-- -- -- -- -- -- -- -- --


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    char input[20] = { 0 };
    //shutdown -s -t 60:电脑会在60s后关机
    //system()——执行系统命令,头文件是stdlib.h
    system("shutdown -s -t 60");
again:
    printf("请注意,你的电脑会在1分钟后关机,如果输入“我是猪”就取消关机\n请输入>:");
    scanf("%s", &input);
    if (strcmp(input, "我是猪") == 0)//两个字符串相等返回0
    {
        system("shutdown -a");
    }
    else
    {
        goto again;
    }
    return 0;
}

*不输入“我是猪”电脑真的会关机,建议保存好电脑当前资料再尝试!!!

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

时间戳的百度百科

当前时间戳

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世长老

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值