1、 登录:密码设置为“abc”,共三次输入密码机会,超过三次为登录不成功。 2、 选择项目:列出三个选项,1、猜数字。2、猜大小。3、退出。选择项目后,执行相应内容。 3、 猜数字:随机产生一个[0,99]间的整数,5次猜数字机会,没猜中会提示太大还是太小。猜完显示出正确答案 4、 猜大小:随机产生一个[1,6]间的整数,1-3为小,4-6为大,用户猜大小。 注:猜数字和猜大小模块后,回到选择项目模块。 用c语言写出上述代码
时间: 2024-03-18 18:40:34 浏览: 59
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
// 定义全局变量
char password[10] = "abc"; // 登录密码
int guess_num_chance = 5; // 猜数字次数
int guess_size_chance = 5; // 猜大小次数
// 登录函数
int login() {
char input_password[10];
int chance = 3;
while (chance > 0) {
printf("请输入密码:");
scanf("%s", input_password);
getchar(); // 消耗掉输入缓冲区中的换行符
if (strcmp(input_password, password) == 0) {
printf("登录成功!\n");
return 1; // 登录成功,返回1
} else {
printf("密码错误,请重试!\n");
chance--;
}
}
printf("密码错误次数超过三次,登录失败!\n");
return 0; // 登录失败,返回0
}
// 猜数字函数
void guess_num() {
srand(time(NULL)); // 初始化随机数种子
int answer = rand() % 100; // 生成[0,99]间的随机数
int guess;
for (int i = 0; i < guess_num_chance; i++) {
printf("请输入一个0到99之间的整数:");
scanf("%d", &guess);
getchar(); // 消耗掉输入缓冲区中的换行符
if (guess == answer) {
printf("恭喜你,猜对了!\n");
return;
} else if (guess < answer) {
printf("你猜的数字太小了!\n");
} else {
printf("你猜的数字太大了!\n");
}
}
printf("很遗憾,你没有在%d次内猜对,正确答案是%d。\n", guess_num_chance, answer);
}
// 猜大小函数
void guess_size() {
srand(time(NULL)); // 初始化随机数种子
int answer = rand() % 6 + 1; // 生成[1,6]间的随机数
int guess;
for (int i = 0; i < guess_size_chance; i++) {
printf("请输入一个数字(1表示小,2表示中,3表示大):");
scanf("%d", &guess);
getchar(); // 消耗掉输入缓冲区中的换行符
if (guess == 1 && answer <= 3 || guess == 2 && answer == 4 || guess == 3 && answer >= 5) {
printf("恭喜你,猜对了!\n");
return;
} else {
printf("很遗憾,你猜错了!\n");
}
}
printf("很遗憾,你没有在%d次内猜对,正确答案是%s。\n", guess_size_chance, answer <= 3 ? "小" : "大");
}
// 主函数
int main() {
int choice;
int logged_in = 0; // 记录是否已登录
while (1) {
printf("请选择以下项目:\n");
printf("1. 猜数字\n");
printf("2. 猜大小\n");
printf("3. 退出\n");
scanf("%d", &choice);
getchar(); // 消耗掉输入缓冲区中的换行符
switch (choice) {
case 1:
if (!logged_in) {
logged_in = login(); // 如果未登录,则先登录
}
if (logged_in) {
guess_num(); // 登录成功后,执行猜数字游戏
}
break;
case 2:
if (!logged_in) {
logged_in = login(); // 如果未登录,则先登录
}
if (logged_in) {
guess_size(); // 登录成功后,执行猜大小游戏
}
break;
case 3:
printf("欢迎下次再来!\n");
return 0;
default:
printf("无效的选择,请重新选择!\n");
}
}
return 0;
}
```
注意事项:
1. 为了避免输入缓冲区中的换行符对后续输入造成影响,建议使用`scanf`函数读取输入,然后使用`getchar`函数消耗掉输入缓冲区中的换行符。
2. 在猜数字和猜大小模块后,需要回到选择项目模块,因此需要在执行完游戏后再次进入循环,等待用户的选择。为了实现这个功能,可以使用`break`语句跳出当前的`switch`语句,然后重新进入循环。
3. 为了防止用户在未登录的情况下直接进入游戏,可以在选择游戏前设置一个`logged_in`标志,初始值为0,表示未登录。如果用户选择了游戏,则先判断`logged_in`的值,如果为0,则调用`login`函数进行登录。登录成功后,将`logged_in`的值设置为1,表示已登录。
阅读全文