OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3076|回复: 12

帮我看下这段C语言有什么错误

[复制链接]

34

主题

178

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-11-1
在线时间
183 小时
发表于 2016-1-22 14:03:12 | 显示全部楼层 |阅读模式
10金钱
if(15<pitch<30)flag_yaw=1;
                        else if(30<pitch<45)flag_yaw=2;
                        else if(45<pitch<60)flag_yaw=3;
                        else if(60<pitch<90)flag_yaw=4;

                        else if(-15<pitch<-30)flag_yaw=5;
                        else if(-30<pitch<-45)flag_yaw=6;
                        else if(-45<pitch<-60)flag_yaw=7;
                        else if(-60<pitch<-90)flag_yaw=7;
                        //上下识别
//                        if(15<roll<30)flag_yaw=9;
//                        else if(30<roll<45)flag_yaw=10;
//                        else if(45<roll<60)flag_yaw=11;
//                        else if(60<roll<90)flag_yaw=12;

//                        if(-15<roll<-30)flag_yaw=13;
//                        else if(-30<roll<-45)flag_yaw=14;
//                        else if(-45<roll<-60)flag_yaw=15;
//                        else if(-60<roll<-90)flag_yaw=16;
                        switch (flag_yaw){
                                case 1:   sprintf((char*)buffer,"\n\rposition = 1  \n\r\0");  flag_yaw=0; break;
                                case 2:   sprintf((char*)buffer,"\n\rposition = 2  \n\r\0");  flag_yaw=0;   break;
                                case 3:   sprintf((char*)buffer,"\n\rposition = 3  \n\r\0");  flag_yaw=0;  break;              
                                case 4:   sprintf((char*)buffer,"\n\rposition = 4  \n\r\0");  flag_yaw=0;  break;
                                case 5:   sprintf((char*)buffer,"\n\rposition = 5  \n\r\0");  flag_yaw=0;  break;
                                case 6:   sprintf((char*)buffer,"\n\rposition = 6  \n\r\0");  flag_yaw=0;  break;
                                case 7:   sprintf((char*)buffer,"\n\rposition = 7  \n\r\0");  flag_yaw=0;  break;              
                                case 8:   sprintf((char*)buffer,"\n\rposition = 8  \n\r\0");  flag_yaw=0;  break;
                                default:  sprintf((char*)buffer,"\n\rposition = unknown\n\r\0");   break;
                                                         }
                                        printf("%s\r\n",buffer);       
                }         

串口只输出position = 1

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-4-28
在线时间
5 小时
发表于 2016-1-22 14:52:09 | 显示全部楼层
从你这段代码看不出大问题,只是你的所有判断综合起来会把几个数(30、45、60...)排除在外了!应该要加上等号!如果不加等号,而你的flag_yaw是个全局变量的话,就有可能出现你的情况
回复

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2015-2-15
在线时间
17 小时
发表于 2016-1-22 14:55:51 | 显示全部楼层
(()&&())这样写试试
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12064
金钱
12064
注册时间
2013-3-8
在线时间
1283 小时
发表于 2016-1-22 15:01:37 | 显示全部楼层
那你pitch值是多少呢?另外,只见到大于小于号,相等的时候如何处理?有两个地方的flag_yaw=7?
回复

使用道具 举报

34

主题

178

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-11-1
在线时间
183 小时
 楼主| 发表于 2016-1-22 15:03:27 | 显示全部楼层
Llinuxu 发表于 2016-1-22 14:52
从你这段代码看不出大问题,只是你的所有判断综合起来会把几个数(30、45、60...)排除在外了!应该要加上 ...

变量就在main函数里面
回复

使用道具 举报

34

主题

178

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-11-1
在线时间
183 小时
 楼主| 发表于 2016-1-22 15:14:06 | 显示全部楼层
augustedward 发表于 2016-1-22 15:01
那你pitch值是多少呢?另外,只见到大于小于号,相等的时候如何处理?有两个地方的flag_yaw=7?

pitch值随着位置的变化不断变化
回复

使用道具 举报

34

主题

178

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-11-1
在线时间
183 小时
 楼主| 发表于 2016-1-22 15:14:43 | 显示全部楼层
augustedward 发表于 2016-1-22 15:01
那你pitch值是多少呢?另外,只见到大于小于号,相等的时候如何处理?有两个地方的flag_yaw=7?

写的太快,一个7,一个8
回复

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-4-28
在线时间
5 小时
发表于 2016-1-22 15:29:03 | 显示全部楼层
名扬天下 发表于 2016-1-22 15:03
变量就在main函数里面

if(15<pitch<30)-------------> if((15 < pitch)&&(pitch <= 30))       后面的判断以此类推
回复

使用道具 举报

34

主题

178

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-11-1
在线时间
183 小时
 楼主| 发表于 2016-1-22 15:33:51 | 显示全部楼层

还是这样、应该不是这个问题
回复

使用道具 举报

suzhao2008 该用户已被删除
发表于 2016-1-23 10:36:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

8

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2016-1-7
在线时间
15 小时
发表于 2016-1-23 12:08:09 | 显示全部楼层
你把整个程序放在上面看看啊。。。。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-1-23 14:34:59 | 显示全部楼层
if里面这样写不是C语言正常思维,是数学思维。编译器应该是先判断15和pitch,不管15和pitch比大小结果是真是假(1或0),都肯定小于30。后面的没一个能执行到的。
而且照数学思维,-15比-30大。永远不可能成立。
小小蜗牛
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2016-1-23 15:02:06 | 显示全部楼层
if(15<pitch<30)  把所有这种格式全部换成 if(pitch>15&&pitch<30)   很奇怪这种错误编译器不报吗
我有故事,你有酒吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 20:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表