输密码游戏:
1 题目要求
编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入错误,则退出程序)
2 题目分析
- 题目要求我们输入密码,则首先需要创建一个字符串数组来存放我们已经设置好得密码。
- 我们还需要将输入的密码与设置好的密码进行比较,这里将用到strcmp函数。
- 为满足我们要循环输入三次的要求,我们要用到循环。
分析完这些,我们来尝试着完成这个代码。
3 代码实现
首先我们需要创建一个字符串数组psw,用来存储我们每次输入的密码。
char psw[20] = "";
然后我们需要将我们输入的密码和正确的密码进行对比。当两个密码相同时,我们在屏幕上输出“登陆成功”,三次都输入错误的话,我们输出“登录失败”。
为了完成两个密码的比对工作,我们需要用到一个库函数strcmp()。当函数返回值是0时,说明两个密码相等,输出“登陆成功”。
那么我们怎么实现可以输入三次呢?这就要用到我们的循环。下面是代码实现:
int main()
{
char psw[20] = "";//创建字符数组存放输入的密码
int i = 1;//创建一个变量i来统计输入密码的次数
while (i<=3)//当输入3次以上密码时,不再进入循环
{
printf("请输入密码:\n");
scanf("%s", psw);
if (strcmp(psw, "123456") == 0)//对比正确密码和输入的密码
{
break;
}
i++;
}
if (4 == i)//当输入超过3次密码时,显示登录失败
{
printf("登录失败\n");
}
else
{
printf("登陆成功\n");
}
return 0;
}
猜数字游戏
1 题目要求
系统随机生成一个数字,请你猜出这个数字是什么。当你猜的数字小于正确数字时,打印“猜小了!;当猜的数字大于正确数字时,打印“猜大了!”;当猜的数字等于正确数字时,打印“猜对了!”,程序退出。
2 题目分析
- 首先我们打印一个菜单,来提示玩家如何进行和退出游戏。
- 首先我们需要一个随机生成数字的库函数rand(),为了确保每次生成的数字不相同,我们还需要一个用于设置随机数的种子srand(),并以time(NULL)作为参数。
- 为了程序能多次循环执行,直到我们猜出正确的数字,我们又用到了循环结构语句;同时为了根据玩家的输入来进行不同的选择,我们用到选择语句中的switch语句。
3 代码实现
我们先来打印一个游戏菜单:
void menu()
{
printf("*********************************\n");
printf("**************1.play*************\n");
printf("**************0.exit*************\n");
printf("*********************************\n");
}
当玩家输入1时开始游戏,输入0时退出游戏。
现在,我们来完成游戏的主体函数,game()函数。
在game函数中,我们要实现一下几点:
- 随机生成一个整数;
- 让玩家输入一个整数
- 一次一次的判断玩家输入的数字和正确数字的差异。
void game()
{
int num = rand() % 100;//随机生成一个0~99之间的数字
int guess = 0;
while (1)//一直循环,直到猜对为止
{
printf("请输入你猜的数字:");
scanf("%d", &guess);
//判断正确数字和所猜数字的大小关系
if (num < guess)
{
printf("猜大了!\n");
}
else if (num > guess)
{
printf("猜小了!\n");
}
else
{
printf("猜对了!\n");
printf("还要来一次吗:\n");
break;
}
}
}
我们之前说过,rand()函数在使用时最好再使用一个srand()函数,我们把srand()函数放在主函数中。同时,主函数需要实现以下功能:
- 接收并判断玩家的输入(1.play / 0.exit);
- 根据不同的输入走向不同分支;
- 将以上两步放在循环中;
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
menu();
printf("请选择:\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("游戏结束\n");
break;
default :
printf("无效输入\n");
break;
}
} while (input);
return 0;
}
这里选择用do...while循环,为的是即使input等于0,也会进入循环并提示“游戏结束”,然后退出。switch语句用来判断每次输入的input的值,并做出判断。
那么以下就是完整代码:
void menu()
{
printf("*********************************\n");
printf("**************1.play*************\n");
printf("**************0.exit*************\n");
printf("*********************************\n");
}
void game()
{
int num = rand() % 100;//随机生成一个0~99之间的数字
int guess = 0;
while (1)//一直循环,直到猜对为止
{
printf("请输入你猜的数字:");
scanf("%d", &guess);
//判断正确数字和所猜数字的大小关系
if (num < guess)
{
printf("猜大了!\n");
}
else if (num > guess)
{
printf("猜小了!\n");
}
else
{
printf("猜对了!\n");
printf("还要来一次吗:\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
menu();
printf("请选择:\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("游戏结束\n");
break;
default :
printf("无效输入\n");
break;
}
} while (input);
return 0;
}