规则
用户可以选择进入游戏、退出游戏或重新选择。在游戏中,用户有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;
}