【C语言】循环和分支(猜数字小游戏)

本文详细介绍了C语言中的if-else、switch、while、do-while和for循环,以及break和goto的用法,并通过实例演示了如何实现一个带有计时功能的猜数字游戏。
摘要由CSDN通过智能技术生成

1.几个分支

(1)if

if()//括号里条件,0为假,非0为真,和用&&,且用||
{
            //执行的内容,超过一个要加大括号
}
else if//取不到上面的条件就会到else,else 后可直接加if嵌套
{


}

要注意悬浮else的情况,else会找离自己最近的if组合,该加大括号加大括号

(2)switch

int 1=0;
switch(i)//括号内整形
{
case 1: //可能的结果,比如i=1运行以下代码
{

        //代码
break; //可使用break来跳出switch分支
}

case 2:
{


      //代码
}

default://走不了前面case给的内容就会走defult,一般default可有可无
{


       //代码
}
}

2.几个循环

(1)while循环

#include<stdio.h>
while(1)   //括号里是条件,其中1是真,0是假,放1会无限循环,0会脱离循环
{            //大括号里一般放要循环的内容
 printf("hehe");           //比如打印“hehe”
}

(2)do -while循环

do
{

            //大括号里是要循环的内容



}
while()  //小括号里是判断条件,0会停止循环,1会无限循环

(3)for循环

int i=0;
for (i=0;i<10;i++)//括号里分别是初始化值,判断条件,每轮循环的最后一操作,注意使用‘;’分隔不是逗号
{
       //循环内容


}

3.break,goto

break一般只能用来跳出一层循环,或退出switch。而goto用法更为广泛,一般分支和循环都能使用

while(1)
{

if()
goto away;       //用goto创造一扇“门” 
}


away:
       //比如这种,如果上方if条件符合可以直接传送到下面的away,跳出了循环

4.猜数字小游戏

(1)先可以制作个菜单

void menu()//定义无返回值的函数,之后可以在主函数中使用
{
    printf("猜数字(1-100)\n");
    printf("***********\n");
    printf("**1.play***\n");
    printf("**0.exit***\n");
    printf("***********\n");
}

(2)把主函数的框架搭好

int main()
{
    int input = 0;
    do
    {
        menu(); //调用我们的菜单
        scanf("%d", &input);//根据菜单输入一个数值
        switch (input)
        {
        case 1:
            printf("游戏开始\n");//扣1开始游戏
            break;
        case 0:
            break;//扣0退出游戏
        default:
            printf("输入错误请重新输入\n");//扣的不是0也不是1,直接回循环重扣
            break;
        }
    } while (input);//正好利用while括号中为0退出循环
    printf("已退出游戏\n");
    return 0;
}

(3)搭建游戏

void game()
{
	int r = rand() % 100 + 1;//利用rand函数生成假随机数,用取余数的方式给随机数范围限定
	int guess = 0;
	while (1)
	{
	printf("请输入:");//输入猜的数字
		scanf("%d", &guess);
	if (guess > r)
			printf("猜大了\n");
	else if (guess< r)
		{
			printf("猜小了\n");
		}
	else
	    {
			printf("猜对了\n");
			break;//猜对了就跳出循环
		}
	}	
}

(4)

但我们要让每次玩数值都随机,但不能在玩的过程中随机,所以把srand函数放在主函数中来

#include<stdio.h>
#include<time.h>
void menu()
{

	printf("猜数字(1-100)\n");
	printf("***********\n");
	printf("**1.play***\n");
	printf("**0.exit***\n");
	printf("***********\n");
}

void game()
{
	int r = rand() % 100 + 1;
	int guess = 0;
	while (1)
	{
		printf("请输入:");
		scanf("%d", &guess);
		if (guess > r)
			printf("猜大了\n");
		else if (guess< r)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("猜对了\n");
			break;
		}
	}	
}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//放入主函数中每次游玩都能重新刷新随机数
do
{
	menu();
	scanf("%d", &input);
	switch (input)
	{
	case 1:
	{
		printf("游戏开始");
		game();
		break;
	}
	case 0:
		break;
	default:
		printf("输入错误请重新输入");
		break;
	}
	} while (input);
	printf("已退出游戏");
	return 0;
	}

(5)给朋友上点强度(设置个猜错一次就开始倒计时关机,每猜错一次减10s)

void game()
{
    int r = rand() % 100 + 1;
    int guess = 0;
    int shutdownTime = 120; // 首先初始化关机时间为120秒

    while (shutdownTime > 0)
    {
        printf("请输入:");
        scanf("%d", &guess);

        if (guess > r)
        {
            printf("猜大了\n");
            if (shutdownTime > 0)
            {
                system("shutdown -a");//首先取消一次关机预约时间,因为不能重复设定
                char command[50];//定义command字符组
                sprintf(command, "shutdown -s -t %d", shutdownTime);//利用sprintf函数格式化关机时间
                system(command); // 更新关机时间
            }
            else
            {
                printf("时间用完,游戏结束\n");
                break; // 时间用完结束游戏
            }
        }
        else if (guess < r)
        {
            printf("猜小了\n");//重复上面的操作
            if (shutdownTime > 0)
            {
                system("shutdown -a");
                char command[50];
                sprintf(command, "shutdown -s -t %d", shutdownTime);
                system(command); // 更新关机时间
            }
            else
            {
                printf("时间用完,游戏结束\n");
                break; // 时间用完结束游戏
            }
        }
        else
        {
            printf("猜对了\n");
            system("shutdown -a"); //猜对了就取消关机吧(滑稽)
            break;
        }

        shutdownTime -= 10; // 每次猜错减少10秒
        
    }
}

(5)最后来个完整代码(可不断再优化,并不是终稿,发挥想象力吧)

#include<stdlib.h>
#include<stdio.h>
#include<time.h>

void menu()
{
    printf("猜数字(1-100)\n");
    printf("***********\n");
    printf("**1.play***\n");
    printf("**0.exit***\n");
    printf("***********\n");
}

void game()
{
    int r = rand() % 100 + 1;
    int guess = 0;
    int shutdownTime = 120; // 初始关机时间120秒

    while (shutdownTime > 0)
    {
        printf("请输入:");
        scanf("%d", &guess);

        if (guess > r)
        {
            printf("猜大了\n");
            if (shutdownTime > 0)
            {
                system("shutdown -a");
                char command[50];
                sprintf(command, "shutdown -s -t %d", shutdownTime);
                system(command); // 更新关机时间
            }
            else
            {
                printf("时间用完,游戏结束\n");
                break; // 时间用完结束游戏
            }
        }
        else if (guess < r)
        {
            printf("猜小了\n");
            if (shutdownTime > 0)
            {
                system("shutdown -a");
                char command[50];
                sprintf(command, "shutdown -s -t %d", shutdownTime);
                system(command); // 更新关机时间
            }
            else
            {
                printf("时间用完,游戏结束\n");
                break; // 时间用完结束游戏
            }
        }
        else
        {
            printf("猜对了\n");
            system("shutdown -a"); // 取消关机
            break;
        }

        shutdownTime -= 10; // 每次猜错减少10秒
        
    }
}

int main()
{
    int input = 0;
    srand((unsigned int)time(NULL));
    do
    {
        menu();
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            printf("游戏开始\n");
            game();
            break;
        case 0:
            break;
        default:
            printf("输入错误请重新输入\n");
            break;
        }
    } while (input);
    printf("已退出游戏\n");
    return 0;
}

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值