gpt4 book ai didi

c - 需要有限状态机指导

转载 作者:行者123 更新时间:2023-11-30 18:55:00 25 4
gpt4 key购买 nike

我需要一些帮助来更改有限状态机中的状态。我的状态机的结构如下:

typedef struct stateMachine {

char name;
struct stateMachine *next0;
struct stateMachine *next1;
}stateMac,*stateMac_p;

static stateMac_p current_state;

我正在考虑使用 *stateMac_p 来指向状态机的当前状态。 next0 是用户输入 0 时的当前状态,next1 是用户输入 1 时的当前状态。假设下面给出了一个示例状态表:

A B C

B C D

C D A

我已经实现了一个状态机,并使用以下代码初始化了状态:

{
int i=0;

for (i=0;i<3;i++)
fsm[i].name=i+65;
fsm[0].next0=(&(fsm[1]));
fsm[0].next1=(&(fsm[2]));
fsm[1].next0=(&(fsm[2]));
fsm[1].next1=(&(fsm[3]));
fsm[2].next0=(&(fsm[3]));
fsm[2].next1=(&(fsm[0]));

//... and so on

current_state = fsm[2].name;
}

程序执行时,首先打印当前状态并等待用户输入。我的问题是如何更改 main 中的状态?例如,如果按下 0,则应将当前状态更改为 D。或者如果按下 1,则应根据当前状态 C 和 D A 作为下一个状态将状态更改为 A。我试图按如下方式完成它,但它给了我错误。

case '0':
current_state=current_state->next0;
printf("The current state now is %c\n",current_state);

对于情况“1”依此类推。

代码可以编译,但是当按下 0 时,程序崩溃。请帮助更改状态。

最佳答案

如果我正确解释您的代码,那么我会假设以下内容:

  1. 按如下方式更改分配:current_state = &(fsm[2]);。我认为您想要指向一个州,而不是一个州的名称。
  2. 应该是 printf("当前状态是 %c\n",current_state->name);

您还可以像这样定义结构并避免使用 switch 语句:

typedef struct stateMachine {
char name;
struct stateMachine *next[2];
} stateMac, *stateMac_p;

下一个状态(假设有效的输入字符c):

current_state = current_state->next[c-48];

关于c - 需要有限状态机指导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29019020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com