bootgames 发表于 2012-9-21 15:23:31

C程序求教

                               U8 k;
                               U16 A={L1,L2,L3};
                               U16 B={S1,S2,S3};
                               U8 sign;

                               for(k=0x01;k<0x10;k++)
                               {
                               if(A==1)//如果数组A中有一个值等于1 就发送第一组数据 ,反之 sign=1 ,发送第二组数据
                               {
                               发送第一组数据
                               }
                               else
                               {
                                 sign=1;
                               }
                              
                               }
                              
                               if(sign==1)
                               {
                               发送第二组数据
                               }
                               else
                               {
                                 ;
                               }


问题:这个程序可以实现“如果数组A中有一个值等于1 就发送第一组数据,反之,发送第二组数据”,但问题是数组A中有几个1就会发送几次数据,我想法是 无论A中有几个1,都发送最前面那个1的信息及数据,其他等于1的信息不再处理。

loongsuns 发表于 2012-9-21 15:51:31

break;{:lol:}

luweixuan 发表于 2012-9-21 15:36:09

本帖最后由 luweixuan 于 2012-9-21 23:53 编辑

U8 k;
U16 A={L1,L2,L3};
U16 B={S1,S2,S3};
U8 sign;

sign = 0;
for(k=0x01;k<0x10;k)
{
        if(A==1)
                sign=1;//编辑前为手误sign = 0;                
}

if(sign==1)
{
        ;//发送第一组数据
}
else
{
        ;//发送第二组数据
}

sign = 0

孩子莫悲伤 发表于 2012-9-21 15:48:08

luweixuan 发表于 2012-9-21 15:36 static/image/common/back.gif
U8 k;
U16 A={L1,L2,L3};
U16 B={S1,S2,S3};


sign 一直为0呀!~不行呀

leafstamen 发表于 2012-9-21 15:23:32

U8 k;
                               U16 A={L1,L2,L3};
                               U16 B={S1,S2,S3};
                               U8 sign;

                               for(k=0x01;k<0x10;k++)
                               {
                               if(A==1)//如果数组A中有一个值等于1 就发送第一组数据 ,反之 sign=1 ,发送第二组数据
                               {
                               发送第一组数据
                               break;
                               }
                               else
                               {
                                 sign=1;
                               }
                              
                               }
                              
                               if(sign==1)
                               {
                               发送第二组数据
                               }
                               else
                               {
                                 ;
                               }

bootgames 发表于 2012-9-21 16:01:01

luweixuan 发表于 2012-9-21 15:36 static/image/common/back.gif
U8 k;
U16 A={L1,L2,L3};
U16 B={S1,S2,S3};


谢谢 不过有点问题

bootgames 发表于 2012-9-21 16:03:41

loongsuns 发表于 2012-9-21 15:51 static/image/common/back.gif
break;

谢谢
强大

bootgames 发表于 2012-9-21 16:03:57

leafstamen 发表于 2012-9-21 15:59 static/image/common/back.gif
U8 k;
                               U16 A={L1,L2,L3};
                               U16 B={ ...

谢谢 强大啊

leafstamen 发表于 2012-9-21 16:07:21

我回复的晚,最佳答案应该是loongsuns。
提示一下,break好用,但是别太上瘾,看准了break的是for,不是break的if,曾经有同事写代码莫名其妙跑飞,最后查出来main里面的if加了break,把main给break出去了。

jiangxingyuan 发表于 2012-9-21 16:07:44

                               U8 k;
                               U16 A={L1,L2,L3};
                               U16 B={S1,S2,S3};
                               //U8 sign;      //完全不用另设标志位

                               for(k=0x01;k<0x10;k++)
                               {
                                 if(A==1)      break;
                               }
                               if(k==10)
                               {
                                  发送数组2
                               }
                               else
                               {
                               发送数组1

                               }
                              

bootgames 发表于 2012-9-21 16:31:33

leafstamen 发表于 2012-9-21 16:07 static/image/common/back.gif
我回复的晚,最佳答案应该是loongsuns。
提示一下,break好用,但是别太上瘾,看准了break的是for,不是bre ...

追问啊:
break跳出的是for循环
第一次运行还可以
但是现在运行两组组数据会同时发出

leafstamen 发表于 2012-9-21 16:52:34

bootgames 发表于 2012-9-21 16:31 static/image/common/back.gif
追问啊:
break跳出的是for循环
第一次运行还可以


如果第一组数据不满足条件,那就是必然的了,因为你的 if(sign==1)在for循环之外,还有定义的A,循环却是1~16,内存溢出会导致乱往外发数据的。

bootgames 发表于 2012-9-21 17:02:03

本帖最后由 bootgames 于 2012-9-21 17:05 编辑

leafstamen 发表于 2012-9-21 16:52 static/image/common/back.gif
如果第一组数据不满足条件,那就是必然的了,因为你的 if(sign==1)在for循环之外,还有定义的A,循环 ...

不是
我数组里已经改为15个值了
循环15次
程序有个漏洞

如果数组里第一个数值=0 那么第一个if不会执行 直接就进else了 sign就=1了 所以第二组数据也跟着发送了我是想让它全部为0的时候才执行 sign=1

leafstamen 发表于 2012-9-21 17:14:41

bootgames 发表于 2012-9-21 17:02 static/image/common/back.gif
不是
我数组里已经改为15个值了
循环15次


if((sign==1)&&(15==k))
到底是15还是16,你自己设定数值,循环到k=16最起码得定义A。

bootgames 发表于 2012-9-21 17:24:09

leafstamen 发表于 2012-9-21 17:14 static/image/common/back.gif
if((sign==1)&&(15==k))
到底是15还是16,你自己设定数值,循环到k=16最起码得定义A。 ...

嘎嘎
果然强大
OK 调试通过~
多谢相助!

luweixuan 发表于 2012-9-21 23:42:14

本帖最后由 luweixuan 于 2012-9-21 23:49 编辑

孩子莫悲伤 发表于 2012-9-21 15:48 static/image/common/back.gif
sign 一直为0呀!~不行呀

手误,把for里的sign=0改为sign=1就可。效率再高点,在其后面加break;记得要加{}
页: [1]
查看完整版本: C程序求教