直接上代码,不足之处请大神多多指教:
#include <stdio.h>
#include <windows.h>
#define LIGHT "●"
#define CIRCLE "〇"
#define NUM 3
enum {GREEN,YELLOW,RED};
void settime(int time);
void printlight(int sig);
void settime(unsigned time,unsigned sig);
void OutputSignal(int sig);
void (*signal(int sig, void (*func)(int)))(int);
void printyellowlight(void);
void printgreenlight(void);
void printredlight(void);
static red_time = 5;
static yellow_time = 2;
static green_time = 5;
void settime(int time)
{
int i = 0;
for(i = 1;i <= time;i ++)
{
printf("%d\b",i);
Sleep(1000);
}
system("cls");
}
void printlight(int sig)
{
int i = 0;
switch(sig)
{
case GREEN:
printgreenlight();
break;
case YELLOW:
printyellowlight();
break;
case RED:
printredlight();
break;
default:
break;
}
}
void OutputSignal(int sig)
{
switch(sig)
{
case GREEN:
printlight(GREEN);
break;
case YELLOW:
printlight(YELLOW);
break;
case RED:
printlight(RED);
break;
default:
break;
}
}
void printyellowlight(void)
{
system("color 0e");
printf("%s\n%s\n%s ",CIRCLE,CIRCLE,LIGHT);
settime(yellow_time);
}
void printgreenlight(void)
{
system("color 0a");
printf("%s\n%s\n%s ",CIRCLE,LIGHT,CIRCLE);
settime(green_time);
}
void printredlight(void)
{
system("color 0c");
printf("%s\n%s\n%s ",LIGHT,CIRCLE,CIRCLE);
settime(red_time);
}
void (*signal(int sig, void (*func)(int)))(int)
{
func(sig);
return func;
}
int main(void)
{
int sig1 = 0;
int sig2 = 1;
while (1)
{
(*signal(sig1,OutputSignal))(sig2);
sig1 = (sig2+1)%NUM;
sig2 = (sig1+1)%NUM;
}
getch();
return 0;
}