xml地图|网站地图|网站标签 [设为首页] [加入收藏]

正规赌博平台

当前位置:网上十大正规赌博平台 > 正规赌博平台 > C语言状态机,PHP获取input输入框中的值去数据库

C语言状态机,PHP获取input输入框中的值去数据库

来源:http://www.nb-machinery.com 作者:网上十大正规赌博平台 时间:2019-07-11 01:03

前端:

转载声明 如果转载本博客内容,请联系869119842@qq.com,获得作者书面授权

array_values 返回数组中所有的值

<!--商品查询--> 
<input type="text" name="bianhao" value="" maxlength="10" size="10" style="width:100px; margin:0px 0px 0px 25px;height:20px;"/> 
<input type="submit" value="商品编号查询" style="margin:0px 0px 0px 10px;cursor:pointer;background-color:#C30D23;border:0px;color:#FFFFFF;width:85px;border-radius:5px;padding:3px 0;font-size:13px;"/>

前言

近来思绪有点停不下来,构思了一个GUI的框架(用在Cotex-M平台上,很小),期待以后有时间去实现,里面有一个对触摸屏的检测,自然想到使用状态机进行消息的生成和分发,于是想着实现一个状态机实现的模型,以后再其他项目上应用也方便。 
状态机的好处不用多说,自己百度去,但传统的编程模式,无论是C语言,或是硬件FPGA的Verilog都是采用switch-case结构,硬件的还好说,是并行的,但如果是C语言实现状态机则可能需要对每个case进行判断,状态少比如几个可能没什么效率之类的问题,但状态多几十个上百个呢,那么就需要进行上百次的判断是否匹配,毫无疑问效率很低,切每次的状态切换时间也不确定。那么有没有一种好的实现模式不用switch-case结构呢?下面我来为C语言状态机的实现建立一个最优模式。

基本语法:

php后台接收并查询:

实现

前面说了一堆装bi的废话,下面进入正题,前段时间研究了下函数式编程,发现C语言的循环结构完全可以用尾递归(不懂百度)实现,最后C就只剩下唯有if和switch还不能用函数式编程实现,而今天要讲的状态机模式就是用函数式编程实现switch-case,那么switch-case其实可以看做一种查找的跳转,我们知道C语言中goto可以实现跳转,那么还有什么可以实现跳转呢,答案是函数调用,但是又需要如何实现指定的函数调用呢,难道要用if判断,显然没什么意义,那么又没有比if判断(如果上百次判断)更高效的东西呢?有人已经想到是查表,如果将查表和函数调用结合,那么就是函数指针数组的应用了! 

上代码!首先定义一个函数指针类型,为什么要带void *的参数后面会说:

typedef unsigned char State;  typedef State(*Procedure)(void *);

这样就可以方便地定义一个函数指针数组:

Procedure Steps[] = { step_init, step_count, step_done, step_default };

step_init,step_count等是函数名,再定义状态:

enum states{ s_init, s_count, s_done, s_default };

枚举定义对应着{0,1,2,3},有了这些再状态机联系那么可以想到,数组的索引就是状态定义,上核心代码,两行(简单吧!关键是想到):

void BestStateMachine(void * invar)  {      static State NS = s_init; //定义下一状态      NS = Steps[NS](invar);
}

static的变量NS在每次BestStateMachine调用会得到维护,我们只需再每Steps返回下一个状态并保存到NS中可以实现状态的保存和切换。再说说为什么要加个void*的参数,状态机一般有很多自身变量的维护,而且对于mealy状态机还需根据输入判断,因为函数调用返回是不保留局部变量的,那么就需要将变量传递来实现更改和保存,之所以只用了一个void*参数是因为,如果需要保存和传递的变量很多,直接传递会在调用函数是浪费大量的栈空间,且效率低下,采用这种模式,你可以将变量用一个结构体封装,然后将结构体指针传递给void *的形参,再函数内部再强制转换即可使用结构体内部的变量。现在你已经在嘀咕这作者真啰嗦,好上实例代码,就是一个简单的计数器(以前学状态机都从计数器开始),在计数完成打印信息:

#include<stdio.h>  typedef unsigned char State;  typedef State(*Procedure)(void *);  enum states{ s_init, s_count, s_done, s_default };//状态定义  typedef struct _SM_VAR  //对状态机参数封装  {      int cnt;  }SM_VAR;  State step_init(void * arg)//初始化  {      SM_VAR *p = (SM_VAR *)arg;      p->cnt = 0;      printf("CS:init ;cnt=%d;NS:countn", p->cnt);      return s_count;  }  State step_count(void * arg)//计数  {      SM_VAR *p = (SM_VAR *)arg;      if (p->cnt < 3){          p->cnt =1;          printf("CS:count;cnt=%d;NS:countn", p->cnt);          return s_count;      }      else{          printf("CS:count;cnt=%d;NS:donen", p->cnt);          return s_done;      }  }  State step_done(void * arg)//计数完成  {      SM_VAR *p = (SM_VAR *)arg;      printf("CS:done ;cnt=%d;NS:initn", p->cnt);      return s_init;  }  State step_default(void * arg)//错误过程  {      SM_VAR *p = (SM_VAR *)arg;      printf("Wrong Staten");      return s_init;  }  Procedure Steps[] = { step_init, step_count, step_done, step_default };    void BestStateMachine(void * invar)  {      static State NS = s_init; //定义下一状态      NS = Steps[NS](invar);  }  int main(void)  {      SM_VAR var;      int i;      for (i = 0; i <8; i  ){//给状态机8个周期的时钟驱动          BestStateMachine(&var);      }      return 0;  }

最后在VS2013上调试如下:

CS:init ;cnt=0;NS:count  CS:count;cnt=1;NS:count  CS:count;cnt=2;NS:count  CS:count;cnt=3;NS:count  CS:count;cnt=3;NS:done  CS:done ;cnt=3;NS:init  CS:init ;cnt=0;NS:count  CS:count;cnt=1;NS:count  请按任意键继续. . .

array array_values ( array $input )

public function MallList(){ //写方法
$goods=M('shop_goods_info'); //实例化数据库对应的表
$codes=I('param.bianhao'); //获取前台文本框数据
if(isset($codes) && $codes != ''){
$where['code']=$codes;
$this->assign('codes',$codes); //显示
}
}
$info=$classify->where(array('code'=>$code))->find(); //查询语法

总结

以这种模式不仅可以实现上面的Moore型状态机,还可根据实际实现Mealy型状态机,结构清晰易懂,在这里我敢说最优,是因为这是C函数式编程的极限了,如果你有更好的想法联系我,邮箱:869119842@qq.com,唐童鞋。如果你对嵌入式GUI感兴趣,我们可以一起探讨写出我们自己的GUI。

 

 

array_values() 返回 input 数组中所有的值并给其建立数字索引。

2.或者:

参数介绍:

有$_GET 或者 $_POST

参数 描述
input 必需。规定数组。

本文由网上十大正规赌博平台发布于正规赌博平台,转载请注明出处:C语言状态机,PHP获取input输入框中的值去数据库

关键词: mg电子游戏网址