用C语言模拟楼道灯开关控制程序,两个开关都能控制灯的亮灭

相信大家家里都有双开关控制的楼道灯,今天笔者就用C语言模拟实现一下这个过程。

要求是开关A和B都能控制灯的亮灭,用1表示开关有动作,0表示开关无动作

#include
#include
#include
//#include
//#define _CRT_SECURE_NO_WARNINGS
//此处是解决scanf()报错问题,我是在编译器里解决,要运行的话请放开注释
int run_led(int a, int b)//开灯回调函数
{
	return 1;
}
int off1_led(int a, int b)//关灯回调函数
{
	return 0;
}
int off_led(int a, int b)//关灯处理函数,此处1表示按下,0表示没按,因此判断一样。
{
	if (a == 1 && b == 0 || a == 0 && b == 1)//就算两次输入一样,也能关灯
	{
		return 1;
	}
	else if (a == 1 && b == 1 || a == 0 && b == 0)
	{
		return 0;
	}
}
int judge_input(int a, int b)//开灯部分的处理函数
{
	if (a == 1 && b == 0|| a == 0 && b == 1)//正确输入只有这两种
	{
		return 1;
	}
	else if (a == 1 && b == 1 || a == 0 && b == 0)//错误输入会让重新输入
	{
		return 0;
	}
}
int main()
{
	//以scanf()函数模拟输入,1表示开关按下,0表示开关没按
	//以printf()输出c的值,1表示的灯亮,0表示灯灭;
	//a表示楼层1,b表示楼层2
	int c = 0;//对灯的值初始化
	int count = 1;//对用户的输入次数进行计数;
	while (1)
	{
		int a = 0;
		int b = 0;
		int d = 0;
		printf("请输入您的选择\n");
		scanf("%d %d", &a, &b);//接收开关的模拟量
		++count;//记录用户是第几次输入
		Sleep(100);//设置延时模拟用户按键时间过长的情况
		if (count % 2 == 0)//这是偶数次输入,也就是开灯部分
		{
			d = judge_input(a, b);//将接受到的值传入判断输入是否正确判断函数
			if (d == 1 )
			{
				c = run_led(a, b);
				printf("%d 灯点亮\n", c);
				continue;
			}
			else
			{
				printf("您的输入有误,请重新输入\n");
				--count;//当输入有误时将技术减1,从程序意义上也就是忽略这次操作
				continue;
			}
		}
		if (count % 2 == 1)//这是奇数次操作,也就是关灯部分
		{
			d = off_led(a, b);//将接受到的值传入判断输入是否正确判断函数
			if (d == 1 )
			{
				c = off1_led(a, b);
				printf("%d 灯关闭\n", c);
				continue;
			}
			else
			{
				printf("您的输入有误,请重新输入\n");
				--count;
				continue;
			}
		}
	}
	system("pause");
	return 0;
	//关于无操作五分钟后关灯问题,在.c文件中无法开启多线程,我能力有限没法实现。
}

思路介绍
用c语言实现一种功能或者游戏,
第一步:先理清楚这个功能或者游戏的整个过程,然后将过程分块,每一个功能放到一个函数中去执行,而且每一个功能的实现,都包含所有可能产生的输入或者输出。
第二步:在main()函数当中通过调用自建函数的方式,写出程序执行的完整流程。具体的流程请查看代码,有详细的注释,相信代码会说话。

你可能感兴趣的:(c语言)