猜数字游戏(老六版)

规则

用户可以选择进入游戏、退出游戏或重新选择。在游戏中,用户有5次机会猜测一个1到100之间的随机数,如果未能猜中则会触发计算机关机

代码

头文件和宏定义

  • CRT_SECURE_NO_WARNINGS: 宏用于避免 Visual Studio 编译器的警告,关于使用不安全的函数。在此代码中,它的作用是防止 scanf 和 strcpy 这样的函数被标记为不安全。
  • 引入标准的 C 库头文件,包括 stdio.h、stdlib.h、time.h、string.h 和 ctype.h。
#define _CRT_SECURE_NO_WARNINGS 1
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "string.h"
#include "ctype.h"

函数定义

menu

  • menu() 函数用于显示游戏的菜单选项,让用户选择进入游戏或退出游戏。
void menu() {
    printf("输入序号\n");
    printf("--1.进入游戏--\n");
    printf("--2.退出游戏--\n");
}

game

  • game() 函数实现了猜数字的游戏逻辑。
  • 使用 rand() 函数生成一个1到100之间的随机数 r。
  • 用户有5次机会猜测这个随机数。
  • 每次猜测后,根据用户的输入与随机数 r 的大小关系,给出提示(猜大了、猜小了)。
  • 如果用户在5次机会内猜中了 r,则输出猜对了的消息并结束游戏。
  • 如果用户在5次机会内没有猜中,输出正确的随机数 r,然后进入关机操作:
  • 使用 system(“shutdown -s -t 30”) 命令将计算机设定为在30秒后关机。
  • 要求用户输入特定字符串 “葛大侠是大美女” 来取消关机。(可以自定义字符)
  • 如果输入正确的字符串,则使用 system(“shutdown -a”) 取消关机,并输出取消消息。
  • 如果输入错误的字符串,则再次设定计算机在3秒后关机。
void game() {
    int r = rand() % 100 + 1; // 生成1到100之间的随机数
    int guess = 0;
    int count = 5;
    char ch[40] = { 0 };

    while (count > 0) {
        printf("你还有%d次机会!", count);
        printf("我猜这次数字是:");
        scanf("%d", &guess);

        if (guess > r)
            printf("呀!猜大了一点\n");
        else if (guess < r)
            printf("哟!猜小了一点\n");
        else {
            printf("真聪明!猜对了!\n");
            break; // 猜对了就跳出循环
        }

        count--;
    }

    if (count == 0) {
        printf("你完蛋了,次数用完啦!正确数字是%d\n", r);
        system("shutdown -s -t 30"); // 关闭计算机,30秒后关机
        printf("电脑将在30秒内关机。\n");
        printf("请输入葛大侠是大美女取消关机\n");
        scanf("%s", ch); // 获取输入字符串

        // 使用字符串比较时忽略大小写
        if (strcmp("葛大侠是大美女", ch) == 0) {
            system("shutdown -a"); // 取消计算机关机
            printf("关机已取消,真替你松了口气\n");//可自定义字符
        }
        else {
            printf("臭小子,给你能耐的\n");//可自定义字符
            system("shutdown -s -t 3"); // 再次关机,3秒后关机
        }
    }
}

main()

  • main()函数是程序的入口
  • 设置了随机数种子 srand((unsigned int)time(NULL)),确保每次运行程序时随机数的种子不同,从而获得不同的随机数序列。
  • 使用 do-while 循环来显示菜单、接收用户输入,并根据输入调用相应的功能:
  • 输入为 1,则调用 game() 函数开始游戏。
  • 输入为 2,则退出游戏。
  • 其他输入则提示选择错误,重新显示菜单让用户重新选择。

完整代码

#define _CRT_SECURE_NO_WARNINGS 1
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "string.h"
#include "ctype.h"

void menu() {
    printf("输入序号\n");
    printf("--1.进入游戏--\n");
    printf("--2.退出游戏--\n");
}

void game() {
    // 生成随机数
    int r = rand() % 100 + 1;
    // 猜数字
    int guess = 0;
    int count = 5;
    char ch[40] = { 0 };
    while (count > 0) {
        printf("你还有%d次机会!", count);
        printf("我猜这次数字是:");
        scanf("%d", &guess); // 使用scanf函数,确保输入的安全性
        if (guess > r)
            printf("呀!猜大了一点\n");
        else if (guess < r)
            printf("哟!猜小了一点\n");
        else {
            printf("真聪明!猜对了!\n");
            break; // 猜对了就跳出循环
        }
        count--;
    }
    if (count == 0) {
        printf("你完蛋了,次数用完啦!正确数字是%d\n", r);
        system("shutdown -s -t 30");
        printf("电脑将在30秒内关机。\n");
        printf("请输入葛大侠是大美女取消关机\n");
        scanf("%s", ch);
         使用字符串比较时忽略大小写
        if (strcmp("葛大侠是大美女", ch) == 0) {
            system("shutdown -a");
            printf("关机已取消,真替你松了口气\n");
        }
        else {
            printf("臭小子,给你能耐的\n");
            system("shutdown -s -t 3");
        }
    }
}

int main() {
    int input = 0;
    // 生成随机数
    srand((unsigned int)time(NULL)); // 强制类型转换成unsigned int类型

    do {
        menu();
        // 提示选择菜单
        printf("请选择:");
        if (scanf("%d", &input) != 1) {
            printf("输入错误,请重新选择\n");
            while (getchar() != '\n'); // 清除输入缓冲区
            continue;
        }
        switch (input) {
        case 1:
            game();
            break;
        case 2:
            printf("退出游戏\n");
            return 0;
        default:
            printf("选择错误,请重新选择\n");
            break;
        }
    } while (input);
    return 0;
}
喜欢的铁铁可以点个美丽的赞赞

在这里插入图片描述

在这里插入图片描述

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值