C语言系列之干点大事(一)

小枫是一个喜欢在网络上玩各种竞猜游戏的有为青年,尤其喜欢那种玩游戏还能拿奖品的游戏项目。

话说有一天,他的狐朋狗友小鹏向他推荐了一款游戏,名为数字猜猜看,只要能猜对数字,就可以赢取iphone13和Watch Series 7这两个重量级的苹果产品,说的小枫心里一阵春心荡漾,迫不及待的找小鹏要了数字猜猜看的网址,登录了上去,开始玩了起来。

玩了一会,小枫感觉有些不对劲,不管怎么猜,都猜不对数字,网站一会提示你猜大了,一会提示你猜小了,就是猜不到真实的数字,一阵不好的感觉在小枫的头脑中滚动。

小枫觉得不能就这样算了,必须要找到问题的根源,于是他就利用自己曾经在蓝翔技校学习的电脑知识,一不小心的潜入了网站的后台,直达核心源码,发现了一个小秘密。。。

void menu()
{
	printf("*******猜数字游戏********
");
	printf("*********1.play**********
");
	printf("*********0.exit**********
");
	printf("*************************
");

}

void game()
{
	int guess;
	int res = rand() % 100 + 1;

	while (1) {
		printf("请输入你要猜的数字>");
		scanf("%d", &guess);

		if (res > guess) 
		{
			printf("大了
");
		}
		
		else if (res<guess)
		{
			printf("小了
");
		}
		else
		{
			printf("猜对了
");
			break;
		}
	}


}

int main()
{
	menu();
	int a = 0;
	srand((unsigned int)(time(NULL)));
	do {

		printf("请输入选项>");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏");
			break;
		default:
			printf("选择错误,重新选择
");
			break;
		}
	} while (a);


}

核心代码很简单,C语言写的一个小程序,使用了一个C语言内时间的库函数生成随机数,然后将随机数控制在100以内,猜100以内的数字,这没有什么问题,但是小枫发现主要的问题是在这个game函数上。

void game()
{
	int guess;
	int res = rand() % 100 + 1;

	while (1) {
		printf("请输入你要猜的数字>");
		scanf("%d", &guess);

		if (res > guess) 
		{
			printf("大了
");
		}
		
		else if (res<guess)
		{
			printf("小了
");
		}
		else
		{
			printf("猜对了
");
			break;
		}
	}


}

经过仔细的研究和复盘,原来这个函数在if判断上出现了逻辑错误,会误导他人,输入错误的数字,如果这样输入下去,永远也猜不对。

于是小枫就将核心源码进行了修改,将if判断修改为正确的逻辑。

void game()
{
	int guess;
	int res = rand() % 100 + 1;

	while (1) {
		printf("请输入你要猜的数字>");
		scanf("%d", &guess);

		if (guess>res) 
		{
			printf("大了
");
		}
		
		else if (guess<res)
		{
			printf("小了
");
		}
		else
		{
			printf("猜对了
");
			break;
		}
	}


}

这样小枫就觉得可以欢天喜地的赢取苹果产品大礼包啦!小枫按照修改后的代码,猜对了数字,向网站提交了收获礼品的家庭地址。开心的和女朋友睡了过去。

然而一等好几天,依然没有收到苹果产品的大礼包,小枫觉得自己遭到了电信诈骗,一怒之下,举报了猜数字网站,还冲着电脑骂了一句,他妈的坏人。

突然,一阵急促的敲门声打乱了小枫的情绪,小枫转过头,大叫了一声,谁呀,能轻点吗?门不需要用钱买呀。

我们是公安局网安大队,请开下门。

小枫一听,眉头一紧,一阵不好的预感涌上心头。。。

经验分享 程序员 微信小程序 职场和发展