#include #define N 3 //状态值
struct State
{
int i;
void (*CreateState)(struct State *s);
void (*Show)(struct State s);
void (*StateTrans[N])(struct State s);
};
void StateTrans0(struct State s)
{
s.i=0;
s.Show(s);
}
void StateTrans1(struct State s)
{
s.i=1;
s.Show(s);
}
void StateTrans2(struct State s)
{
s.i=2;
s.Show(s);
}
void Show(struct State s)
{
printf("State-%d\n",s.i);
}
void CreateState(struct State *s)
{
s->Show=Show;
s->StateTrans[0]=StateTrans0;
s->StateTrans[1]=StateTrans1;
s->StateTrans[2]=StateTrans2;
}
enum{ST0=0,ST1,ST2}STATE;//枚举状态
int main()
{
State s;//实例化
//初始化
s.CreateState=CreateState;
s.CreateState(&s);
//模拟状态调用
while(1)
{
scanf("%d",&STATE);
if(STATE<0||STATE>2)
{
break;
}
s.StateTrans[STATE](s);
}
getchar();
return 0;
}