1.初阶版
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void print(void) {
printf("**************\n");
printf("***1.猜数字***\n");
printf("****2.退出****\n");
printf("**************\n");
}
int main() {
print();
printf("请选择:");
int a = 0;
scanf("%d", &a);
if (a == 2)
{
printf("已退出。");
return 0;
}
else
{
srand((unsigned int)time(NULL));
int m=rand() % 100 + 1;
while (1)
{
printf("请猜数字:");
int b = 0;
scanf("%d", &b);
if (b > m)
{
printf("猜大了\n");
}
else if (b < m)
{
printf("猜小了\n");
}
if (b == m)
{
printf("恭喜你,猜对了!\n");
break;
}
}
}
return 0;
}
2.进阶版
#include <stdlib.h>
#include <time.h>
//函数
void menu()
{
printf("************************\n");
printf("****** 1. play *******\n");
printf("****** 0. exit *******\n");
printf("************************\n");
}
//猜数字游戏的实现
void game()
{
//1. 生成随机数(1~100)
int ret = rand() % 100 + 1;//1~100
//n%100 余数的取值的范围 0~99
//2. 猜数字
int guess = 0;
int count = 5;
while (count)
{
printf("请猜数字:>");
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
count--;
}
if (count == 0)
{
printf("猜失败了,正确的数字是:%d\n", ret);
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
3.两版对比【左初阶右进阶】
问题一:菜单打印格式
优化建议:
1.用英文
2.用空格更美观
问题二:限制猜数字次数
初阶版:无限猜
进阶版:有限制猜数字个数
问题三:取变量名
优化建议:取变量名要有意义
问题四:考虑用户在菜单中可能选择的数字
初阶:
只考虑1,2;
使用if分支
进阶:
考虑到1,2以及之外的数字
使用Switch分支
问题五:游戏实现的主要部分用函数编写
优点:代码简单,易读
初阶
VS
进阶
问题六:选择错误仍可以继续猜数字
进阶版用do while 循环语句实现了:只有玩家输入0才真正停止猜数字游戏;
【所以菜单上的数字选择也很有讲究(while规则:0停止循环,非0继续循环)】
4.再练习一遍的结果
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu() {
printf("*****************\n");
printf("*** 1.play ****\n");
printf("*** 0.exit ****\n");
printf("*****************\n");
}
void game()
{
srand((unsigned int)time(NULL));
int rel = rand() % 100 + 1;
int count = 5;
int guess = 0;
while (count)
{
printf("请输入数字:\n");
scanf("%d", &guess);
if (guess > rel)
{
printf("猜大了\n");
}
if (guess < rel)
{
printf("猜小了\n");
}
if (guess == rel)
{
printf("恭喜你!猜对了\n");
break;
}
count--;
}
if (count == 0)
{
printf("猜失败了,正常数字是%d\n", rel);
}
}
int main() {
int chose = 0;
do
{
menu();
printf("请选择:");
scanf("%d", &chose);
switch (chose)
{
case 1:
game();
break;
case 0:
printf("已退出");
break;
default:
printf("选择错误");
break;
}
} while (chose);
return 0;
}