相信大家家里都有双开关控制的楼道灯,今天笔者就用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()函数当中通过调用自建函数的方式,写出程序执行的完整流程。具体的流程请查看代码,有详细的注释,相信代码会说话。