找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1938|回复: 7
打印 上一主题 下一主题
收起左侧

这个C语言switch-for程序,为啥能进入,但是程序跳过for执行 请大家帮忙看看

[复制链接]
跳转到指定楼层
楼主
ID:510170 发表于 2021-11-2 14:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C语言源程序如下:
switch(send_state )

case:0X07

      if (to_work_storage_Pointer > to_work_send_Pointer) //存储指针大于发送指针
        {
            for (i = to_work_send_Pointer; i > to_work_storage_Pointer; i++) //i=发送指针,小于存储指针i++
            {
                t = IapRead((i * 16) + 14); //判断此条信息是否已经发送完毕
                if (t == 0xAA)              //有未发送完毕的数据
                {
                    to_work_send_Pointer = i;
                    send_state = 0X05; //改变状态至5
                    return;
                }                   //已写入,未发送,下班发送标志为0
                else if (t == 0xFF) //数据已经发送完毕
                {
                    to_work_send_Pointer = i;
                    send_state = 0X06; //改变状态至6
                    return;
                } //未写入,未发送,
            }
        }
        else if (to_work_send_Pointer >= to_work_storage_Pointer) //发送指针大于存储指针
        {
            for (i = to_work_send_Pointer; i > 127; i++)
            {
               t = IapRead((i * 16) + 14); //判断此条信息是否已经发送完毕
                if (t == 0xAA)
                {
                    to_work_send_Pointer = i;
                    send_state = 0X05; //改变状态至8
                    return;
                } //已写入,未发送,下班发送标志为0
                else if (t == 0xFF)
                {
                    to_work_send_Pointer = i;
                    send_state = 0X06; //改变状态至11
                    return;
                } //未写入,未发送,
            }
        }
        break;

条件满足的话,是能进去的,但是就是进不去for,这样就不能跳转了。不知到为什么
加入调试代码


else if (to_work_send_Pointer >= to_work_storage_Pointer) //发送指针大于存储指针
        {
            TX1_write2buff(0XBA);
            TX1_write2buff(to_work_send_Pointer);
            TX1_write2buff(to_work_storage_Pointer);
            TX1_write2buff(send_state);
            for (i = to_work_send_Pointer; i > 127; i++)
            {
                LED = 0;
                t = IapRead((i * 16) + 14); //判断此条信息是否已经发送完毕
                if (t == 0xAA)
                {
                    to_work_send_Pointer = i;
                    send_state = 0X05; //改变状态至8
                    TX1_write2buff(i);
                    IN5 = 0;
                    break;
                } //已写入,未发送,下班发送标志为0
                else if (t == 0xFF)
                {
                    to_work_send_Pointer = i;
                    send_state = 0X06; //改变状态至11
                    TX1_write2buff(i);
                    IN6 = 0;
                    break;
                } //未写入,未发送,
            }
            IN3 = 0;            
        }
        break;

串口回传的信息如下:BA 00 00 07
IN3灯亮,LED,IN5,IN6灯都不亮,也就是说。程序进了“else if (to_work_send_Pointer >= to_work_storage_Pointer) ”
但是从for处蹭了蹭就是不进去,都不知道怎么回事。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 2021-11-2 16:48 | 只看该作者
for (i = to_work_send_Pointer; i > to_work_storage_Pointer; i++) //i=发送指针,小于存储指针i++

这个 for 么?

你能确保 to_work_send_Pointer    >   to_work_storage_Pointer  ??  感觉这个判断, 和你的注释矛盾啊?
要是小于发送指针,压根不会开始循环, 那么也压根不会 i++ 阿
回复

使用道具 举报

板凳
ID:510170 发表于 2021-11-2 19:12 | 只看该作者
188610329 发表于 2021-11-2 16:48
for (i = to_work_send_Pointer; i > to_work_storage_Pointer; i++) //i=发送指针,小于存储指针i++

...

前面还有一个判断呀。
if (to_work_storage_Pointer > to_work_send_Pointer) //存储指针大于发送指针
        {
            for (i = to_work_send_Pointer; i > to_work_storage_Pointer; i++) //i=发送指针,小于存储指针i++

确定以及肯定是存储指针大于发送指针了才进去,再说还有下一步。
肯定是能进第一步的,但是for就是进不去。
回复

使用道具 举报

地板
ID:624769 发表于 2021-11-2 19:27 | 只看该作者
ttmax3 发表于 2021-11-2 19:12
前面还有一个判断呀。
if (to_work_storage_Pointer > to_work_send_Pointer) //存储指针大于发送指针
...

你前面判断的是,  to_work_storage_Pointer  >  to_work_send_Pointer
然后,这个判断成立后, 你这个 循环,得要求是:
                                to_work_send_Pointer   > to_work_storage_Pointer
所以,只要前面 if 判断成立, 那么,这个循环是绝对不会运行的!

为什么,你反而觉得理所当然应该进循环呢?
回复

使用道具 举报

5#
ID:510170 发表于 2021-11-2 19:31 | 只看该作者
188610329 发表于 2021-11-2 19:27
你前面判断的是,  to_work_storage_Pointer  >  to_work_send_Pointer
然后,这个判断成立后, 你这个  ...

谢谢了。应该就是符号搞错了。粗心所致,谢谢了。
回复

使用道具 举报

6#
ID:624769 发表于 2021-11-2 20:14 | 只看该作者
ttmax3 发表于 2021-11-2 19:31
谢谢了。应该就是符号搞错了。粗心所致,谢谢了。

不谢

通常,不进 for, if, while , 可以理解为表达式不成立,那么,如果你认为,或者Debug的时候看到的值,表达式应当成立的话,那么就检查:表达式的描述是否存在错误。
基本就是这样一个分析过程。
回复

使用道具 举报

7#
ID:824490 发表于 2021-11-2 22:32 | 只看该作者
for(起始值;上限值(或下限值);步进+(或步进-))
就是这么简单,
回复

使用道具 举报

8#
ID:824490 发表于 2021-11-2 22:43 | 只看该作者
本帖最后由 名字不是重点 于 2021-11-2 23:22 编辑

for (i = to_work_send_Pointer; i > to_work_storage_Pointer; i++) 这个错了。

就是说: i在A和B之间,且B>A,哪么,向上增量for(i=A;i<B;i++) ,或是向下减量for(i=B;i>A;i--)


所以:for (i = to_work_send_Pointer; i < to_work_storage_Pointer; i++)

回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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