欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5226|回復: 13
打印 上一主題 下一主題
收起左側

C語言程序執行順序問題

[復制鏈接]
跳轉到指定樓層
樓主
  1. # include <stdio.h>
  2. int main(void)
  3. {
  4. do
  5. {
  6.     int i,j;
  7.     for (i=0; i<4; i++)
  8.     {
  9.         printf("a");
  10.         for (j=0; j<3; j++)
  11.         {
  12.             printf("b");
  13.         }
  14.     }
  15.     return 0;
  16. }while(1);
  17. }
復制代碼
我認為的程序走的順序是:第一次進入do while循環里,走一次for循環,輸出的是abbbabbbabbbabbb,然后判斷while表達式真假,因為是while(1),按理說應該繼續輸出abbbabbbabbbabbb,繼續循環,但是循環只走了一次,我的邏輯是哪里出錯了,請指出,謝謝
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

來自 6#
ID:708768 發表于 2020-10-30 17:31 | 只看該作者
關于循環的程序我還有一個問題,圖在下方
整個程序在板子上運行時,在兩層的for循環語句里,每次第一層走第一遍沒問題,第二層走完十次,再次進行第一層進行判斷循環時,第二層循環有時候走一次,有時候走兩次,或者不走,然后整個程序就停住了,這是什么原因

mmexport1604049449144.jpg (808.97 KB, 下載次數: 103)

總程序運行次序

總程序運行次序

mmexport1604049600489.jpg (382.96 KB, 下載次數: 100)

for循環嵌套

for循環嵌套
回復

使用道具 舉報

沙發
ID:836680 發表于 2020-10-30 15:46 | 只看該作者
哈哈哈,你如果只需要程序一直循環跑,那么就把while(1)放在do的位置,do不要就可以了。
像這樣:
# include <stdio.h>
int main(void)
{
while(1){
    int i,j;
    for (i=0; i<4; i++)
    {
        printf("a");
        for (j=0; j<3; j++)
        {
            printf("b");
        }
    }
  //  return 0;
}
}
回復

使用道具 舉報

板凳
ID:675145 發表于 2020-10-30 16:10 | 只看該作者
return 0;這條語句跳出循環了
回復

使用道具 舉報

地板
ID:234075 發表于 2020-10-30 16:36 | 只看該作者
如果要一直循環下去,while(1);放在最后使程序停止在這里(進入循環),所以只打印輸出1次;
回復

使用道具 舉報

5#
ID:708768 發表于 2020-10-30 17:29 | 只看該作者
xuchaopan 發表于 2020-10-30 15:46
哈哈哈,你如果只需要程序一直循環跑,那么就把while(1)放在do的位置,do不要就可以了。
像這樣:
# incl ...

看到了,謝謝
回復

使用道具 舉報

7#
ID:654028 發表于 2020-10-31 16:15 | 只看該作者
feelings 發表于 2020-10-30 17:31
關于循環的程序我還有一個問題,圖在下方
整個程序在板子上運行時,在兩層的for循環語句里,每次第一層走 ...

debug調試一下吧
回復

使用道具 舉報

8#
ID:830240 發表于 2020-10-31 17:04 | 只看該作者
把return 0去掉或者注釋掉,程序運行到return它就返回函數口,不再執行下面的語句,也就不會判斷while是否為真了
回復

使用道具 舉報

9#
ID:420836 發表于 2020-11-1 06:19 | 只看該作者
那是while(1)和do-while(1)之間的區別
回復

使用道具 舉報

10#
ID:708768 發表于 2020-11-2 10:29 | 只看該作者

我用keil調試后,在第二張圖的221行和223行放斷點,在watch中看 i 和 j 的值,然后同樣是在走第二遍循環時, i 和 j 的值顯示cannot evaluate
回復

使用道具 舉報

11#
ID:708768 發表于 2020-11-2 15:02 | 只看該作者
feelings 發表于 2020-10-30 17:31
關于循環的程序我還有一個問題,圖在下方
整個程序在板子上運行時,在兩層的for循環語句里,每次第一層走 ...

當我去掉循環里的延時函數,以及定義pulse里面的延時函數是,就沒有這個問題了,但是我又需要延時操作,要怎么改程序
回復

使用道具 舉報

12#
ID:833190 發表于 2020-11-2 19:59 | 只看該作者
你把return 0放在while的下一行就行,你現在放在while前面了,當跳出里面的for循環后就執行了return 0,這個程序就直接結束了,不會執行后面的while判斷。
回復

使用道具 舉報

13#
ID:833190 發表于 2020-11-2 20:15 | 只看該作者
feelings 發表于 2020-11-2 15:02
當我去掉循環里的延時函數,以及定義pulse里面的延時函數是,就沒有這個問題了,但是我又需要延時操作, ...

可能是你延時過長,當下一次采集到的str[11]時,上一次還沒執行完,但是又進行了if判斷。你設置一個標志位,當str[11]滿足條件時,標志位為1,當執行完全部for循環后清除標志位。用這個標志位作為if里面的條件。
回復

使用道具 舉報

14#
ID:837937 發表于 2020-11-2 20:15 | 只看該作者
for循環走完后,有return就直接跳出main函數了,所以只走了一次,把return刪掉
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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