搜索
bottom↓
回复: 15

C程序求教

[复制链接]

出0入0汤圆

发表于 2012-9-21 15:23:31 | 显示全部楼层 |阅读模式
                               U8 k;
                               U16 A[4]={L1,L2,L3};
                               U16 B[4]={S1,S2,S3};
                               U8 sign;

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


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

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-9-21 15:51:31 | 显示全部楼层
break;

出65入0汤圆

发表于 2012-9-21 15:36:09 | 显示全部楼层
本帖最后由 luweixuan 于 2012-9-21 23:53 编辑

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

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

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

sign = 0

出0入0汤圆

发表于 2012-9-21 15:48:08 | 显示全部楼层
luweixuan 发表于 2012-9-21 15:36
U8 k;
U16 A[4]={L1,L2,L3};
U16 B[4]={S1,S2,S3};

sign 一直为0呀!~不行呀

出0入57汤圆

发表于 2012-9-21 15:23:32 | 显示全部楼层
U8 k;
                               U16 A[4]={L1,L2,L3};
                               U16 B[4]={S1,S2,S3};
                               U8 sign;

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

出0入0汤圆

 楼主| 发表于 2012-9-21 16:01:01 | 显示全部楼层
luweixuan 发表于 2012-9-21 15:36
U8 k;
U16 A[4]={L1,L2,L3};
U16 B[4]={S1,S2,S3};

谢谢 不过有点问题

出0入0汤圆

 楼主| 发表于 2012-9-21 16:03:41 | 显示全部楼层
loongsuns 发表于 2012-9-21 15:51
break;

谢谢
强大

出0入0汤圆

 楼主| 发表于 2012-9-21 16:03:57 | 显示全部楼层
leafstamen 发表于 2012-9-21 15:59
U8 k;
                               U16 A[4]={L1,L2,L3};
                               U16 B[4]={ ...

谢谢 强大啊

出0入57汤圆

发表于 2012-9-21 16:07:21 | 显示全部楼层
我回复的晚,最佳答案应该是loongsuns。
提示一下,break好用,但是别太上瘾,看准了break的是for,不是break的if,曾经有同事写代码莫名其妙跑飞,最后查出来main里面的if加了break,把main给break出去了。

出0入0汤圆

发表于 2012-9-21 16:07:44 | 显示全部楼层
                               U8 k;
                               U16 A[4]={L1,L2,L3};
                               U16 B[4]={S1,S2,S3};
                               //U8 sign;        //完全不用另设标志位

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

                               }
                              

出0入0汤圆

 楼主| 发表于 2012-9-21 16:31:33 | 显示全部楼层
leafstamen 发表于 2012-9-21 16:07
我回复的晚,最佳答案应该是loongsuns。
提示一下,break好用,但是别太上瘾,看准了break的是for,不是bre ...

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

出0入57汤圆

发表于 2012-9-21 16:52:34 | 显示全部楼层
bootgames 发表于 2012-9-21 16:31
追问啊:
break跳出的是for循环
第一次运行还可以

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

出0入0汤圆

 楼主| 发表于 2012-9-21 17:02:03 | 显示全部楼层
本帖最后由 bootgames 于 2012-9-21 17:05 编辑
leafstamen 发表于 2012-9-21 16:52
如果第一组数据不满足条件,那就是必然的了,因为你的 if(sign==1)在for循环之外,还有定义的A[4],循环 ...


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

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

出0入57汤圆

发表于 2012-9-21 17:14:41 | 显示全部楼层
bootgames 发表于 2012-9-21 17:02
不是
我数组里已经改为15个值了
循环15次

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

出0入0汤圆

 楼主| 发表于 2012-9-21 17:24:09 | 显示全部楼层
leafstamen 发表于 2012-9-21 17:14
if((sign==1)&&(15==k))
到底是15还是16,你自己设定数值,循环到k=16最起码得定义A[17]。 ...

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

出65入0汤圆

发表于 2012-9-21 23:42:14 | 显示全部楼层
本帖最后由 luweixuan 于 2012-9-21 23:49 编辑
孩子莫悲伤 发表于 2012-9-21 15:48
sign 一直为0呀!~不行呀


手误,把for里的sign=0改为sign=1就可。效率再高点,在其后面加break;记得要加{}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-11 00:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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