You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:53:05