在C语言中实现指定有限状态机(FSM)的技术问询
实现C语言有限状态机(FSM)的代码整理与注意点
你正在尝试实现一个符合指定状态图的有限状态机,已经搭好了基础框架,我帮你把代码和细节整理成清晰的格式,同时提个关键细节供你调试参考:
状态枚举定义
首先是你定义的覆盖所有FSM节点的枚举类型:
typedef enum { Start = 0, Build_Id = 1, Identifier = 2, Build_Num = 3, Number = 4, Error = 5 } State_type;
已编写的核心代码片段
你已经声明了状态转换的核心函数,并在main里启动了字符处理逻辑:
// 状态转换核心函数声明 State_type analyzeData(State_type* currState, char c); int main(int argc, char** argv) { State_type currState = 0; // 注意:此处参数处理存在逻辑问题,需调整 for (int i = 1; i < strlen(*argv); ++i) { analyzeData(&currState, *argv[i]); // 后续输出/状态处理逻辑待补充 } // 收尾逻辑待补充 }
关键调试提示
你当前
main函数的命令行参数处理有明显问题:
*argv指向的是程序自身的名称,不是用户要分析的输入字符串,应该用argv[1]获取第一个命令行参数- 循环条件里的
strlen(*argv)要改成strlen(argv[1]),同时遍历字符时应该用argv[1][i],而非*argv[i]——后者访问的是第i个命令行参数的首字符,和你遍历单个字符串的逻辑完全不符
内容的提问来源于stack exchange,提问作者Ismael
相关产品推荐
相关产品推荐

