首页 > 其他分享 >C语言-状态机模式

C语言-状态机模式

时间:2023-06-06 23:57:07浏览次数:42  
标签:状态 return int State 模式 C语言 状态机 STATE printf

1.假设我们的交通信号灯控制器有以下三个状态:绿灯状态、黄灯状态和红灯状态。在绿灯状态下,我们可以选择进入黄灯状态或红灯状态。在黄灯状态下,我们等待一段时间,然后返回到红灯状态。

2.Code

点击查看代码
#include <stdio.h>
#include <unistd.h>

// 定义状态枚举类型
typedef enum {
    STATE_GREEN,
    STATE_YELLOW,
    STATE_RED
} State;

// 状态转移函数
State greenToYellow() {
    printf("Green -> Yellow\n");
    sleep(1); // 等待 1 秒钟
    return STATE_YELLOW;
}

State greenToRed() {
    printf("Green -> Red\n");
    return STATE_RED;
}

State yellowToRed() {
    printf("Yellow -> Red\n");
    return STATE_RED;
}

State redToGreen() {
    printf("Red -> Green\n");
    return STATE_GREEN;
}

// 状态转移函数数组
State (*stateTransitions[])(void) = {
    greenToYellow,
    greenToRed,
    yellowToRed,
    redToGreen
};

int main() {
    State currentState = STATE_GREEN;

    while (1) {
        printf("Current state: %d\n", currentState);
        currentState = stateTransitions[currentState]();
    }

    return 0;
}

3.详解
状态转移函数数组使用了函数指针数组,可参考如下使用方法

点击查看代码
int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int multiply(int a, int b) {
    return a * b;
}

int divide(int a, int b) {
    return a / b;
}

int (*mathFuncs[4])(int, int) = {add, subtract, multiply, divide};

标签:状态,return,int,State,模式,C语言,状态机,STATE,printf
From: https://www.cnblogs.com/Charles-Hui/p/17462100.html

相关文章

  • 通过状态机方法实现基于FPGA的维特比译码器,包含testbench测试文件
    1.算法仿真效果vivado2019.2仿真结果如下:2.算法涉及理论知识概要viterbi译码算法是一种卷积码的解码算法。优点不说了。缺点就是随着约束长度的增加算法的复杂度增加很快。约束长度N为7时要比较的路径就有64条,为8时路径变为128条。(2<<(N-1))。所以viterbi译码一般应用在约束......
  • 架构师如何找到自己的商业模式
    作为一个架构师,必须要在有限的资源下最大化架构活动所带来的商业价值。对于任何一个架构活动而言,架构师的可用资源,包括商业成本、研发成本、时间成本、迁移成本等等,都是非常有限的。但架构活动就是要在这些限制条件之下,将商业价值最大化。商业价值(Businessvalue)呢,就是从现金收......
  • 程序的编译与链接(C语言为例) #代码写好后到运行期间要经过怎样的过程呢?# 粗略版 #
    (编译与链接)前言每当我们运行一段代码时,编译器都会自动的帮我们编译代码并将代码转换为一个二进制可执行文件(.exe),有了这个可执行文件,便可以执行我们写的程序了。那么编译器对代码的编译以及生成可执行程序的过程是怎样的呢?这个问题便是本文章将要探讨的。程序的环境在A......
  • 逍遥自在学C语言 | break-循环的中断与跳转
    前言在C语言中,break语句是一种控制流语句,它用于终止当前所在的循环结构(for、while、do-while)或者switch语句,从而跳出循环或者结束switch语句的执行。一、人物简介第一位闪亮登场,有请今后会一直教我们C语言的老师——自在。第二位上场的是和我们一起学习的小白程序猿—......
  • 通过状态机方法实现基于FPGA的维特比译码器,包含testbench测试文件
    1.算法仿真效果vivado2019.2仿真结果如下: 2.算法涉及理论知识概要       viterbi译码算法是一种卷积码的解码算法。优点不说了。缺点就是随着约束长度的增加算法的复杂度增加很快。约束长度N为7时要比较的路径就有64条,为8时路径变为128条。(2<<(N-1))。所以viterbi......
  • C语言编程语法—文件读写
    一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。本章将讲解文件管理的重要调用。打开文件您可以使用fopen()函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型FIL......
  • 关于C语言题602
    1、编写函数voidcount(chara[],charw[][10],intn,intb[])。功能是:统计w指向的数组中的n个单词在a指向的字符串中各自出现的次数(将非字母字符看作单词分割符),拧将统计结果依次保存在b指向的数组中。 #include<stdio.h>#include<string.h>#defineN10intmain(){......
  • 哨兵模式
    哨兵简介哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。哨兵的作用监控不断的检查master和slave是否正常运行master存活检测、master与slave运行情况检测通知(提醒)当被监控的服务器......
  • 转:使用c#实现23种常见的设计模式
    转自:https://www.cnblogs.com/hejiale010426/archive/2023/06/05/17457761.html设计模式通常分为三个主要类别:创建型模式结构型模式行为型模式这些模式是用于解决常见的对象导向设计问题的最佳实践。以下是23种常见的设计模式并且提供c#代码案例:1.创建型模式1.1单例模......
  • 原型模式的用法
    目录一、原型模式的用法1.1介绍1.2结构1.3原型模式类图1.4实现1.4.1克隆的分类1.4.2代码1.5"三好学生"奖状案例1.5.1"三好学生"奖状类图1.5.2代码1.6深、浅克隆的区分1.6.1浅克隆1.6.2深克隆一、原型模式的用法1.1介绍用一个已经创建的实例作为原型,通过复制该原型......