找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 5649|回復: 32
打印 上一主題 下一主題
收起左側

這個C語言程序怎么跳出這個WHILE循環(huán)?

  [復制鏈接]
回帖獎勵 100 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:621862 發(fā)表于 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循環(huán)  模塊不返回正確數據他就一直卡在這了

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:816763 發(fā)表于 2020-9-4 17:56 | 只看該作者
要跳出這個while循環(huán)  必須要匹配到數據
回復

使用道具 舉報

板凳
ID:466505 發(fā)表于 2020-9-4 18:33 | 只看該作者
加個超時唄,循環(huán)N次后就跳出;
回復

使用道具 舉報

地板
ID:627214 發(fā)表于 2020-9-4 20:55 | 只看該作者
用break跳出循環(huán)
回復

使用道具 舉報

5#
ID:511890 發(fā)表于 2020-9-4 21:50 | 只看該作者
當RxBuffer字符串中能夠找到 +CGATT: 1 的時候,才能跳出循環(huán)。
感覺Clear_Buffer();  的位置有點問題。
如果Clear_Buffer(); 是清空RxBuffer的話,那么應該把Clear_Buffer(); 放到delay_ms(1000);之后。
這個應該是一個文件或者文件名查找之類的程序的一部分。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:235954 發(fā)表于 2020-9-5 09:19 | 只看該作者
strx==NULL收到空格,接受數據完畢就退出while循環(huán)
回復

使用道具 舉報

7#
ID:478514 發(fā)表于 2020-9-5 14:00 | 只看該作者
要跳出這個while循環(huán)  必須要匹配到數據
回復

使用道具 舉報

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

使用道具 舉報

9#
ID:750684 發(fā)表于 2020-9-7 08:15 | 只看該作者

要跳出這個while循環(huán)  必須要匹配到數據
回復

使用道具 舉報

10#
ID:816586 發(fā)表于 2020-9-7 08:41 | 只看該作者
while循環(huán)  
回復

使用道具 舉報

11#
ID:808634 發(fā)表于 2020-10-9 08:33 | 只看該作者
break;
回復

使用道具 舉報

12#
ID:367460 發(fā)表于 2020-10-9 10:22 | 只看該作者
可以在死循環(huán)中加一個計數,如果計數滿之前還是沒有跳出while(strx==NULL),可以直接用 break; 跳出
回復

使用道具 舉報

13#
ID:86450 發(fā)表于 2020-10-9 11:38 | 只看該作者
goto 。。。。。。。。。。。。
回復

使用道具 舉報

14#
ID:827294 發(fā)表于 2020-10-9 17:33 | 只看該作者
用break打斷跳出循環(huán)
回復

使用道具 舉報

15#
ID:827215 發(fā)表于 2020-10-9 18:27 | 只看該作者
可以在函數內加一個變量,然后自加,自加到一定數時,由你決定是給出警告還是退出
回復

使用道具 舉報

16#
ID:711539 發(fā)表于 2020-10-9 20:07 | 只看該作者
可以設計超時/超循環(huán)次數跳出循環(huán),使用break 語句
回復

使用道具 舉報

17#
ID:626331 發(fā)表于 2020-10-9 20:38 | 只看該作者
這就是你設計的有問題吧,你可以想,如果模塊不返回值,那你就到一個時間之后自己跳出來
回復

使用道具 舉報

18#
ID:821802 發(fā)表于 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;//在循環(huán)之前先把計數的變量清零
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)//當變量的值大于指定的數,即可跳出循環(huán),10可以改成其他的數字
    {
        break;
    }
}
回復

使用道具 舉報

19#
ID:822056 發(fā)表于 2020-10-10 10:06 | 只看該作者
可以嘗試下在循環(huán)中加個break;
回復

使用道具 舉報

20#
ID:486279 發(fā)表于 2020-10-10 14:44 | 只看該作者
strx!=null
回復

使用道具 舉報

21#
ID:653456 發(fā)表于 2020-10-11 12:47 | 只看該作者
加入一個超時跳出的標志位,若檢測不到數據就返回-1之類的標記。
回復

使用道具 舉報

22#
ID:828289 發(fā)表于 2020-10-11 16:12 | 只看該作者
可以加入一個變量來計數循環(huán)次數,次數超過給定值直接break跳出循環(huán)
回復

使用道具 舉報

23#
ID:828383 發(fā)表于 2020-10-11 17:04 | 只看該作者
你這個是你寫的算法有問題,模塊不返回正確數據肯定一直在while循環(huán)呀。你可以加一個跳出循環(huán)標志位。循環(huán)多少次后跳出循環(huán)噻。
回復

使用道具 舉報

24#
ID:342954 發(fā)表于 2020-10-11 17:15 | 只看該作者
用 break;
回復

使用道具 舉報

25#
ID:568565 發(fā)表于 2020-10-11 17:27 | 只看該作者
給個其他條件用break也能跳出
回復

使用道具 舉報

26#
ID:731309 發(fā)表于 2020-10-11 18:12 | 只看該作者
用break跳出,或者在里面用if else跳出即可
回復

使用道具 舉報

27#
ID:828434 發(fā)表于 2020-10-11 19:22 | 只看該作者

給個其他條件用break也能跳出
回復

使用道具 舉報

28#
ID:473159 發(fā)表于 2020-10-11 20:08 | 只看該作者
接收到了正確數據就跳出來,否則就跟你耗下去!你還是要看看你收到的數據有沒有正確解出來,可以試試發(fā)同一個數據是否能解開,后面再發(fā)不一樣的數據
回復

使用道具 舉報

29#
ID:683360 發(fā)表于 2020-10-11 23:22 | 只看該作者
你可以設置個條件  條件滿足退出循環(huán)
回復

使用道具 舉報

30#
ID:829000 發(fā)表于 2020-10-12 21:21 | 只看該作者
break;
回復

使用道具 舉報

31#
ID:829292 發(fā)表于 2020-10-13 14:30 | 只看該作者
你可以聲明一個變量num來記錄次數,運行一次while就+1,在寫個if語句,當這個變量超過你期望的值就是用break 跳出循環(huán);在break之前輸出是這個邏輯跳出的。。
回復

使用道具 舉報

32#
ID:825447 發(fā)表于 2020-10-21 09:11 | 只看該作者
用for語句可以
eg for(n=0;n<10;n++)
     break ;
這樣也可以執(zhí)行一段時間while語句

如果直接用break則會直接跳出while循環(huán),那么你while也沒用了

當然你也可以在while里設置個參數
如while(n--)
{  n=50000  }
該語句也可執(zhí)行一段時間

回復

使用道具 舉報

33#
ID:832903 發(fā)表于 2020-10-21 21:28 | 只看該作者
超時重來,或者可以goto label
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表