找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这个C语言程序怎么跳出这个WHILE循环?

  [复制链接]
回帖奖励 100 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:621862 发表于 2020-9-4 16:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        printf("AT+CGATT?\r\n")
                        delay_ms(700);
        strx=strstr((const char*)RxBuffer,(const char*)"+CGATT: 1");//·μ1
        Clear_Buffer();        
                while(strx==NULL)
                {
            Clear_Buffer();        
            printf("AT+CGATT?\r\n");/
            delay_ms(700);
            strx=strstr((const char*)RxBuffer,(const char*)"+CGATT: 1“)
                                delay_ms(1000);
                }


怎么跳出这个while循环  模块不返回正确数据他就一直卡在这了

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

使用道具 举报

沙发
ID:816763 发表于 2020-9-4 17:56 | 只看该作者
要跳出这个while循环  必须要匹配到数据
回复

使用道具 举报

板凳
ID:466505 发表于 2020-9-4 18:33 | 只看该作者
加个超时呗,循环N次后就跳出;
回复

使用道具 举报

地板
ID:627214 发表于 2020-9-4 20:55 | 只看该作者
用break跳出循环
回复

使用道具 举报

5#
ID:511890 发表于 2020-9-4 21:50 | 只看该作者
当RxBuffer字符串中能够找到 +CGATT: 1 的时候,才能跳出循环。
感觉Clear_Buffer();  的位置有点问题。
如果Clear_Buffer(); 是清空RxBuffer的话,那么应该把Clear_Buffer(); 放到delay_ms(1000);之后。
这个应该是一个文件或者文件名查找之类的程序的一部分。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:235954 发表于 2020-9-5 09:19 | 只看该作者
strx==NULL收到空格,接受数据完毕就退出while循环
回复

使用道具 举报

7#
ID:478514 发表于 2020-9-5 14:00 | 只看该作者
要跳出这个while循环  必须要匹配到数据
回复

使用道具 举报

8#
ID:419968 发表于 2020-9-6 22:42 | 只看该作者
while((strx==NULL)&&(time != 0){time--;}
回复

使用道具 举报

9#
ID:750684 发表于 2020-9-7 08:15 | 只看该作者

要跳出这个while循环  必须要匹配到数据
回复

使用道具 举报

10#
ID:816586 发表于 2020-9-7 08:41 | 只看该作者
while循环  
回复

使用道具 举报

11#
ID:808634 发表于 2020-10-9 08:33 | 只看该作者
break;
回复

使用道具 举报

12#
ID:367460 发表于 2020-10-9 10:22 | 只看该作者
可以在死循环中加一个计数,如果计数满之前还是没有跳出while(strx==NULL),可以直接用 break; 跳出
回复

使用道具 举报

13#
ID:86450 发表于 2020-10-9 11:38 | 只看该作者
goto 。。。。。。。。。。。。
回复

使用道具 举报

14#
ID:827294 发表于 2020-10-9 17:33 | 只看该作者
用break打断跳出循环
回复

使用道具 举报

15#
ID:827215 发表于 2020-10-9 18:27 | 只看该作者
可以在函数内加一个变量,然后自加,自加到一定数时,由你决定是给出警告还是退出
回复

使用道具 举报

16#
ID:711539 发表于 2020-10-9 20:07 | 只看该作者
可以设计超时/超循环次数跳出循环,使用break 语句
回复

使用道具 举报

17#
ID:626331 发表于 2020-10-9 20:38 | 只看该作者
这就是你设计的有问题吧,你可以想,如果模块不返回值,那你就到一个时间之后自己跳出来
回复

使用道具 举报

18#
ID:821802 发表于 2020-10-9 21:21 | 只看该作者
unsigned int cnt;//程序最开始声明一个计数的变量

printf("AT+CGATT?\r\n")
delay_ms(700);
strx=strstr((const char*)RxBuffer,(const char*)"+CGATT: 1");
Clear_Buffer();  
cnt = 0;//在循环之前先把计数的变量清零
while(strx==NULL)
{
    Clear_Buffer();        
    printf("AT+CGATT?\r\n");/
    delay_ms(700);
    strx=strstr((const char*)RxBuffer,(const char*)"+CGATT: 1“)
    delay_ms(1000);

    cnt++;//未返回或返回错误,变量都会在原有基础上+1
    if(cnt > 10)//当变量的值大于指定的数,即可跳出循环,10可以改成其他的数字
    {
        break;
    }
}
回复

使用道具 举报

19#
ID:822056 发表于 2020-10-10 10:06 | 只看该作者
可以尝试下在循环中加个break;
回复

使用道具 举报

20#
ID:486279 发表于 2020-10-10 14:44 | 只看该作者
strx!=null
回复

使用道具 举报

21#
ID:653456 发表于 2020-10-11 12:47 | 只看该作者
加入一个超时跳出的标志位,若检测不到数据就返回-1之类的标记。
回复

使用道具 举报

22#
ID:828289 发表于 2020-10-11 16:12 | 只看该作者
可以加入一个变量来计数循环次数,次数超过给定值直接break跳出循环
回复

使用道具 举报

23#
ID:828383 发表于 2020-10-11 17:04 | 只看该作者
你这个是你写的算法有问题,模块不返回正确数据肯定一直在while循环呀。你可以加一个跳出循环标志位。循环多少次后跳出循环噻。
回复

使用道具 举报

24#
ID:342954 发表于 2020-10-11 17:15 | 只看该作者
用 break;
回复

使用道具 举报

25#
ID:568565 发表于 2020-10-11 17:27 | 只看该作者
给个其他条件用break也能跳出
回复

使用道具 举报

26#
ID:731309 发表于 2020-10-11 18:12 | 只看该作者
用break跳出,或者在里面用if else跳出即可
回复

使用道具 举报

27#
ID:828434 发表于 2020-10-11 19:22 | 只看该作者

给个其他条件用break也能跳出
回复

使用道具 举报

28#
ID:473159 发表于 2020-10-11 20:08 | 只看该作者
接收到了正确数据就跳出来,否则就跟你耗下去!你还是要看看你收到的数据有没有正确解出来,可以试试发同一个数据是否能解开,后面再发不一样的数据
回复

使用道具 举报

29#
ID:683360 发表于 2020-10-11 23:22 | 只看该作者
你可以设置个条件  条件满足退出循环
回复

使用道具 举报

30#
ID:829000 发表于 2020-10-12 21:21 | 只看该作者
break;
回复

使用道具 举报

31#
ID:829292 发表于 2020-10-13 14:30 | 只看该作者
你可以声明一个变量num来记录次数,运行一次while就+1,在写个if语句,当这个变量超过你期望的值就是用break 跳出循环;在break之前输出是这个逻辑跳出的。。
回复

使用道具 举报

32#
ID:825447 发表于 2020-10-21 09:11 | 只看该作者
用for语句可以
eg for(n=0;n<10;n++)
     break ;
这样也可以执行一段时间while语句

如果直接用break则会直接跳出while循环,那么你while也没用了

当然你也可以在while里设置个参数
如while(n--)
{  n=50000  }
该语句也可执行一段时间

回复

使用道具 举报

33#
ID:832903 发表于 2020-10-21 21:28 | 只看该作者
超时重来,或者可以goto label
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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