c语言_Day13_07_12
1、猜数字游戏
需求:1、生成随机数,用户猜测数字,电脑反馈用户所猜数字大或小或准确
2、菜单界面
我的代码:
int main()
{
int tarNum = rand();
int inputNum;
int playAgain = 'Y';
printf("欢迎游玩猜数字小游戏\n============================\n");
while (playAgain == 'Y')
{
printf("请输入数字: ");
scanf("%d", &inputNum);
if (inputNum == tarNum)
{
printf("已猜到,随机数就是%d\n", inputNum);
while (1)
{
printf("是否还要继续游玩?(Y/N)\n");
while (getchar() != '\n') {}
scanf("%c", &playAgain);
if (playAgain == 'Y')
{
tarNum = rand();
break;
}
else if (playAgain == 'N')
{
printf("游戏结束\n");
break;
}
else
{
printf("输入错误,请再次输入\n");
}
}
}
else if (inputNum > tarNum)
{
printf("输入的数字较大\n");
}
else
{
printf("输入的数字较小\n");
}
}
return 0;
}
问题:
-
随机数为伪随机数,应当通过srand函数初始化随机数。然而,srand函数需要接收一个随机整数作为参数,可传入一个时间戳作为参数(使用time函数)
-
随机数范围太大,若需生成a~b之间的随机数,则可带入公式
rand() % a + b
-
可以考虑将不同功能的代码封装至不同的函数中调用,逻辑会更清晰
参考代码:
/// <summary>
/// 生成菜单页面
/// </summary>
void menu()
{
printf("***********************\n");
printf("****1.play 0.exit****\n");
printf("***********************\n");
}
/// <summary>
/// 生成1-100之间的随机数
/// </summary>
/// <returns></returns>
int getRandNum()
{
return rand() % 100 + 1;
}
/// <summary>
/// 进行猜数字游戏
/// </summary>
void game()
{
int gusNum = 0;
// 1. 生成随机数
int randNum = getRandNum();
// 2. 猜数字
while (1)
{
printf("请猜数字:");
scanf("%d", &gusNum);
if (gusNum > randNum)
{
printf("大了\n");
}
else if (gusNum < randNum)
{
printf("小了\n");
}
else
{
printf("猜中了\n");
break;
}
}
}
int main()
{
int input = 0;
// 初始化随机数种子
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出游戏\n");
break;
case 1:
// 进行游戏
game();
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
2、goto语句
goto语句由两部分构成:goto和标签名
goto可跳转至标签名所对应的语句处
int main()
{
again:
printf("Hello, World!");
goto again;
return 0;
}
注:goto语句容易被滥用,导致程序执行顺序混乱
特殊的应用场景:跳出深层嵌套的循环
int main()
{
for (int i = 0; i < 100; i++)
{
for (int k = 0; k < 10; k++)
{
if (i == 50)
{
goto out;
}
else
{
printf("%d -- %d\n", k, i);
}
}
}
out:
printf("I'm out\n");
return 0;
}
例:关机程序
// 关机程序
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");
again:
printf("您的电脑将在60s后关机!\n输入'stop'停止关机\n");
scanf("%s", input);
if (strcmp(input, "stop") == 0)
{
system("shutdown -a");
printf("已关闭定时\n");
}
else
{
goto again;
}
return 0;
}
实际上改代码的goto语句部分可使用while语句替代:
while(1)
{
printf("您的电脑将在60s后关机!\n输入'stop'停止关机\n");
scanf("%s", input);
if (strcmp(input, "stop") == 0)
{
system("shutdown -a");
printf("已关闭定时\n");
break;
}
}