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

本文介绍了一个使用C语言模拟双开关控制楼道灯的过程。通过代码实现了开关A和B对灯的亮灭控制,详细解释了如何用1表示开关动作,0表示无动作,并通过函数区分开灯和关灯操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
//#include<time.h>
//#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()函数当中通过调用自建函数的方式,写出程序执行的完整流程。具体的流程请查看代码,有详细的注释,相信代码会说话。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值