社区
C语言
帖子详情
多个switch嵌套怎么写好,有没别的写法
nicker08
2010-07-22 11:52:54
开发单片机的,他要求是串口输入操作命令和操作数,操作数和操作码都不是固定长度的,现在我能想到的就是switch里面在嵌套switch,关键是命令和数据都不等长,让我头痛啊
比如说命令是0xff,0xaa,后接8B数据,实现功能1;
命令0xee,0xcc,0xdd,后接20B数据实现功能2;
还有很多
命令都是唯一可译的
有没有什么建议啊
...全文
817
26
打赏
收藏
多个switch嵌套怎么写好,有没别的写法
开发单片机的,他要求是串口输入操作命令和操作数,操作数和操作码都不是固定长度的,现在我能想到的就是switch里面在嵌套switch,关键是命令和数据都不等长,让我头痛啊 比如说命令是0xff,0xaa,后接8B数据,实现功能1; 命令0xee,0xcc,0xdd,后接20B数据实现功能2; 还有很多 命令都是唯一可译的 有没有什么建议啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nicker08
2010-07-24
打赏
举报
回复
我自己写出来了,前面还有写变量定义,
unsigned char data[5];
unsigned char data_display[20];
unsigned char data_diy[8];
unsigned char data_flag=0;
unsigned char flag=0;
nicker08
2010-07-24
打赏
举报
回复
void response(unsigned char x)
{
data[data_flag]=x;
/*********************系统设置部分**********************/
switch(data[0])
{
case 0xfe:
{
if(data_flag>0)
switch(data[1])
{
case 0x47:
{
if(data_flag>2&&data[2]==0x01) //
{
if(flag>3&&data[3]>0&&data[3]<9) //命令正确,开始接受数据
{
data_display[flag]=data[4];
flag++;
if(flag==20) //接收完20B数据
{
//hanshu();
data_flag=0;
flag=0;
break;
}
break;
}
data_flag++;
break;
}
data_flag++;
break;
}
nicker08
2010-07-24
打赏
举报
回复
[Quote=引用 22 楼 marshalking0000 的回复:]
swith的case太多确实挺麻烦的,每个都要一个break;
[/Quote]
这个倒无所谓,问题是不能把操作数误识别为操作命令,我昨天写了一个基本可以,但是有bug,求个健壮的啊
hrx1989
2010-07-24
打赏
举报
回复
单片机!!
也在学习中!
marshalking0000
2010-07-24
打赏
举报
回复
swith的case太多确实挺麻烦的,每个都要一个break;
versed8
2010-07-24
打赏
举报
回复
17 楼 的高手,能给个具体的例子吗
nicker08
2010-07-24
打赏
举报
回复
[Quote=引用 17 楼 jldream110 的回复:]
这个问题 你应该去 单片机版 问 。 用串口中断模式接收,在中断里设置关键字,把你说的 命令的第一个字节如 oxaa 看做是 head 。用head索引下面的数据,在数据接收完 设置全局标志 如 finish。 在中断里 不用switch 嵌套。switch 只 case head 就行 然后查询标志finish ,然后执行动作。
[/Quote]
感觉很有用。。。
但还是不是非常清晰该怎么做
blackmailer
2010-07-23
打赏
举报
回复
要不你用循环吧,其实用switch效率还是很高的。
例如unsigned int mm[]={0xee,0xcc,0xdd};
m1:数据1
m2:数据2
..
mn:数据n
for(int gg=0;gg<10;gg++){
if(input==mm[gg])
{
}
}
zjf30366
2010-07-23
打赏
举报
回复
正如楼上的所言,使用状态机也是不错的选择。当然使用switch也不是不可。问题是都可以解决的。
jackyjkchen
2010-07-23
打赏
举报
回复
数组索引+函数指针能几乎解决所有需要大量switch和if……else的情况,我差不多从学编程的第二年起,就从来不用switch了
bobo364
2010-07-23
打赏
举报
回复
《编译原理》词法分析之有限状态自动机,
应该可以,或者用5楼的hash也是不错的选择
顺便问下7楼有啥《编译原理》的好点的入门的书吗?
原来大学里没这门课了
fancyivan
2010-07-23
打赏
举报
回复
你知道的太多了
theoneluck
2010-07-23
打赏
举报
回复
[Quote=引用 9 楼 ayw215 的回复:]
引用 7 楼 zhao4zhong1 的回复:
《编译原理》词法分析之有限状态自动机
同意
写个状态自动机就好办啦
[/Quote]
你知道的太多了
ayw215
2010-07-23
打赏
举报
回复
[Quote=引用 7 楼 zhao4zhong1 的回复:]
《编译原理》词法分析之有限状态自动机
[/Quote]
同意
写个状态自动机就好办啦
Lonelywolf1899
2010-07-23
打赏
举报
回复
楼上会的好多啊,编译原理都出来了。
赵4老师
2010-07-23
打赏
举报
回复
《编译原理》词法分析之有限状态自动机
偶是江湖中人
2010-07-23
打赏
举报
回复
switch就用在这种场合了
若实在不想的话,自己就编写一个函数来实现
Qlaiaqu
2010-07-23
打赏
举报
回复
可以采用hash的方式进行处理:
首先使用某种hash算法,将命令导入该函数,返回某个整数值,然后使用一层switch就可以了。
主要是你要设计好hash算法,保证好接口的能接受所有数据,以及保证好计算结果的唯一性。
这样既简单,速度又快。
jixingzhong
2010-07-23
打赏
举报
回复
当然可以把指令部分合并取值,不过这样看代码的时候就很痛苦了..
jixingzhong
2010-07-23
打赏
举报
回复
switch参数只接收整型数值
加载更多回复(6)
C++
嵌套
switch
语句
您可以把一个
switch
作为一个外部
switch
的语句序列的一部分,即可以在一个
switch
语句内使用另一个
switch
语句。即使内部和外部
switch
的 case 常量包含共同的值,也
没
有矛盾。C++ 中的
switch
语句允许至少 256 个
嵌套
层次。
原生JS--比
Switch
...Case更优雅的实现多条件判断以及三目运算的
嵌套
写
法
前几天看到坐在隔壁的前端大哥
写
的多条件判断
写
法
,十几行代码靠几行轻松实现,看到不同
写
法
的优劣,特地整体出来,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家! 文章目录多条件判断
写
法
三目运算的
嵌套
写
法
多条件判断
写
法
这个判断意思是根据现在的体感来判断季节,寒冷的话是冬天,温暖的话是春天,炎热的话是夏天,凉爽的话是秋天 1. if … else if … else function weather(nowSEP){ let season = '' if(nowSEP=.
Switch
语句优化多层
嵌套
if-else的条件判断问题
传统的解决方案是使用if-else语句来实现条件判断,但当条件较多且
嵌套
复杂时,if-else语句会变得冗长而难以维护。本文将介绍如何使用
Switch
语句来优化处理
嵌套
的if-else条件判断问题,并给出相应的R语言示例代码。然而,在使用
Switch
语句时,需要注意条件的覆盖范围、顺序以及条件值的限制。与if-else语句相比,
Switch
语句可以根据变量的取值直接跳转到相应的代码块,从而避免了
多个
条件的逐一判断。
Switch
语句的每个条件判断都是独立的,不会像if-else语句一样存在条件间的逻辑关系。
Switch
case 使用及
嵌套
语法
Switch
case 使用及
嵌套
语法 目录
switch
case 语句讲解
Switch
也可以
嵌套
代码中 虽然
没
有 限制if else 能够处理的 分支 数量 ,但当分支过多时 , 用 if else 处理会不太方便 ,而且容易出现 if else 配对出错的情况 。 所以 对于这种情况 ,实际开发中一般使用
switch
语句代替...
C语言分支循环其
嵌套
语句
Hello,everyone! forever之前给大家介绍了C语言的分支结构和循环结构,在分支中介绍了分支语句
嵌套
,但当时
没
有介绍
switch
嵌套
,所以这次主要介绍
switch
嵌套
和循环
嵌套
. 首先来说说什么是
嵌套
吧!一个语句内包含另一个完整的语句结构称为语句
嵌套
。内
嵌套
的语句结构内还可以继续
嵌套
其他语句结构,这就构成多层
嵌套
。如在循环体内
嵌套
一个完整的循环语句,就称为循环
嵌套
;在内部循环
嵌套
里在
嵌套
一个循环结构,就是多层循环。
嵌套
的含义是指“完整的包含”。
switch
嵌套
如同 if 语句
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章