标题: 这个C语言程序怎么跳出这个WHILE循环? [打印本页]

作者: 嗯哼11    时间: 2020-9-4 16:03
标题: 这个C语言程序怎么跳出这个WHILE循环?
        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循环  模块不返回正确数据他就一直卡在这了


作者: li25    时间: 2020-9-4 17:56
要跳出这个while循环  必须要匹配到数据
作者: hcfat51h    时间: 2020-9-4 18:33
加个超时呗,循环N次后就跳出;
作者: 无敌小杰杰    时间: 2020-9-4 20:55
用break跳出循环
作者: 幻剑心    时间: 2020-9-4 21:50
当RxBuffer字符串中能够找到 +CGATT: 1 的时候,才能跳出循环。
感觉Clear_Buffer();  的位置有点问题。
如果Clear_Buffer(); 是清空RxBuffer的话,那么应该把Clear_Buffer(); 放到delay_ms(1000);之后。
这个应该是一个文件或者文件名查找之类的程序的一部分。
作者: 梁廷明    时间: 2020-9-5 09:19
strx==NULL收到空格,接受数据完毕就退出while循环
作者: 3319702068    时间: 2020-9-5 14:00
要跳出这个while循环  必须要匹配到数据
作者: adject    时间: 2020-9-6 22:42
while((strx==NULL)&&(time != 0){time--;}
作者: 跟爱的感觉走    时间: 2020-9-7 08:15

要跳出这个while循环  必须要匹配到数据
作者: 图锐工程    时间: 2020-9-7 08:41
while循环  
作者: 七禾页    时间: 2020-10-9 08:33
break;
作者: 昆明路口卖提莫    时间: 2020-10-9 10:22
可以在死循环中加一个计数,如果计数满之前还是没有跳出while(strx==NULL),可以直接用 break; 跳出
作者: jjwangxu2008    时间: 2020-10-9 11:38
goto 。。。。。。。。。。。。
作者: 1293113817    时间: 2020-10-9 17:33
用break打断跳出循环
作者: atom1    时间: 2020-10-9 18:27
可以在函数内加一个变量,然后自加,自加到一定数时,由你决定是给出警告还是退出
作者: 菜鸟yc    时间: 2020-10-9 20:07
可以设计超时/超循环次数跳出循环,使用break 语句
作者: iLike.    时间: 2020-10-9 20:38
这就是你设计的有问题吧,你可以想,如果模块不返回值,那你就到一个时间之后自己跳出来
作者: 540060348    时间: 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;
    }
}
作者: 德斯佩尔    时间: 2020-10-10 10:06
可以尝试下在循环中加个break;
作者: 赵杰赵杰    时间: 2020-10-10 14:44
strx!=null
作者: pmp    时间: 2020-10-11 12:47
加入一个超时跳出的标志位,若检测不到数据就返回-1之类的标记。
作者: 25041    时间: 2020-10-11 16:12
可以加入一个变量来计数循环次数,次数超过给定值直接break跳出循环
作者: 北冥丶渔    时间: 2020-10-11 17:04
你这个是你写的算法有问题,模块不返回正确数据肯定一直在while循环呀。你可以加一个跳出循环标志位。循环多少次后跳出循环噻。
作者: hejianmin    时间: 2020-10-11 17:15
用 break;
作者: chenyinhu    时间: 2020-10-11 17:27
给个其他条件用break也能跳出
作者: 黄河有只鸡    时间: 2020-10-11 18:12
用break跳出,或者在里面用if else跳出即可
作者: asd15455455    时间: 2020-10-11 19:22

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

作者: yoxi    时间: 2020-10-11 20:08
接收到了正确数据就跳出来,否则就跟你耗下去!你还是要看看你收到的数据有没有正确解出来,可以试试发同一个数据是否能解开,后面再发不一样的数据
作者: 13317970316    时间: 2020-10-11 23:22
你可以设置个条件  条件满足退出循环
作者: 花开丿    时间: 2020-10-12 21:21
break;
作者: nervouszx    时间: 2020-10-13 14:30
你可以声明一个变量num来记录次数,运行一次while就+1,在写个if语句,当这个变量超过你期望的值就是用break 跳出循环;在break之前输出是这个逻辑跳出的。。
作者: 上进求学    时间: 2020-10-21 09:11
用for语句可以
eg for(n=0;n<10;n++)
     break ;
这样也可以执行一段时间while语句

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

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


作者: kxdkxd    时间: 2020-10-21 21:28
超时重来,或者可以goto label





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1