分支和循环语句(3)

2024-01-23 09:43:20 浏览数 (1)

3.4.6 猜数字游戏
  1. 打印菜单
代码语言:javascript复制
void menu()
{
	printf("***************************n");
	printf("***** 1.play   0.exit *****n");
	printf("***************************n");
}
  1. 选择玩游戏或退出游戏
代码语言:javascript复制
int main()
{
	//打印菜单
	//1. 玩游戏
	//0. 退出游戏
	int input = 0;

	do
	{
		menu();

		printf("请选择:>");
		scanf("%d", &input);//1 0

		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏n");
			break;
		default:
			printf("选择错误n");
			break;
		}
	} while (input);

	return 0;
}
  1. 猜数字游戏主体
代码语言:javascript复制
//void srand (unsigned int seed);
void game()
{
	//RAND_MAX;
	
	//1. 生成随机数
	int ret = rand()0 1;//可以生成随机数,随机数的范围是:0~32767
	//1~100
	//printf("%dn", ret);

	//2. 猜数字
	int guess = 0;
	
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);

		if (guess > ret)
		{
			printf("猜大了n");
		}
		else if (guess < ret)
		{
			printf("猜小了n");
		}
		else
		{
			printf("恭喜你,猜对了n");
			break;
		}
	}
}

int main()
{
	//time函数可以返回一个时间戳
	srand((unsigned int)time(NULL));//要给srand传递一个变化的值,计算机上的时间是时刻发生变化的
	
	return 0;
}

完整代码:

代码语言:javascript复制
#include <stdio.h>
#include <stdlib.h>//rand和srand需要一个stdlib.h的头文件
#include <time.h>

void menu()
{
	printf("***************************n");
	printf("***** 1.play   0.exit *****n");
	printf("***************************n");
}

//void srand (unsigned int seed);
void game()
{
	//RAND_MAX;
	
	//1. 生成随机数
	int ret = rand()0 1;//可以生成随机数,随机数的范围是:0~32767
	//1~100
	//printf("%dn", ret);

	//2. 猜数字
	int guess = 0;
	
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);

		if (guess > ret)
		{
			printf("猜大了n");
		}
		else if (guess < ret)
		{
			printf("猜小了n");
		}
		else
		{
			printf("恭喜你,猜对了n");
			break;
		}
	}
}

int main()
{
	//打印菜单
	//1. 玩游戏
	//0. 退出游戏
	int input = 0;
	//time函数可以返回一个时间戳
	srand((unsigned int)time(NULL));//要给srand传递一个变化的值,计算机上的时间是时刻发生变化的

	do
	{
		menu();

		printf("请选择:>");
		scanf("%d", &input);//1 0

		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏n");
			break;
		default:
			printf("选择错误n");
			break;
		}
	} while (input);

	return 0;
}

4. goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

代码语言:javascript复制
#include <stdio.h>

int main()
{
again:
	printf("hehen");
	printf("hehen");
	printf("hehen");
	printf("hehen");
	
	goto again;//可以向前跳,也可以向后跳

//end:

	return 0;
}

注:

代码语言:javascript复制
#include <stdio.h>

void test()
{
flag:
	printf("testn");
}

int main()
{
	printf("hehen");
	
	goto flag;//goto 语句只能一个函数内部跳转,不能跨函数跳转的

	return 0;
}

从理论上, goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

代码语言:javascript复制
//关机程序 
//1. 程序运行起来后,1分钟内电脑关机
//2. 如果输入:我是猪,就取消关机
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
	char input[20] = { 0 };
	//程序倒计时关机
	system("shutdown -s -t 60");

again:
	printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机n");
	scanf("%s", input);//输入
	
	if (0 == strcmp(input, "我是猪"))
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}

	return 0;
}
代码语言:javascript复制
//不用goto语句

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

int main()
{
	char input[20] = { 0 };
	//程序倒计时关机
	system("shutdown -s -t 60");
	while (1)
	{
		printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机n");
		scanf("%s", input);//输入

		if (0 == strcmp(input, "我是猪"))
		{
			system("shutdown -a");
			break;
		}
	}

	return 0;
}

附:关于shutdown命令的扩展

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。例如:一次跳出两层或多层循环。多层循环这种情况使用break是达不到目的的,它只能从最内层循环退出到上一层的循环。

0 人点赞