|
發布時間: 2020-10-30 13:43
正文摘要:# include <stdio.h> int main(void) { do { int i,j; for (i=0; i<4; i++) { printf("a"); &nbs ... |
| for循環走完后,有return就直接跳出main函數了,所以只走了一次,把return刪掉 |
feelings 發表于 2020-11-2 15:02 可能是你延時過長,當下一次采集到的str[11]時,上一次還沒執行完,但是又進行了if判斷。你設置一個標志位,當str[11]滿足條件時,標志位為1,當執行完全部for循環后清除標志位。用這個標志位作為if里面的條件。 |
| 你把return 0放在while的下一行就行,你現在放在while前面了,當跳出里面的for循環后就執行了return 0,這個程序就直接結束了,不會執行后面的while判斷。 |
feelings 發表于 2020-10-30 17:31 當我去掉循環里的延時函數,以及定義pulse里面的延時函數是,就沒有這個問題了,但是我又需要延時操作,要怎么改程序 |
心有浮生 發表于 2020-10-31 16:15 我用keil調試后,在第二張圖的221行和223行放斷點,在watch中看 i 和 j 的值,然后同樣是在走第二遍循環時, i 和 j 的值顯示cannot evaluate |
| 那是while(1)和do-while(1)之間的區別 |
| 把return 0去掉或者注釋掉,程序運行到return它就返回函數口,不再執行下面的語句,也就不會判斷while是否為真了 |
feelings 發表于 2020-10-30 17:31 debug調試一下吧 |
xuchaopan 發表于 2020-10-30 15:46 看到了,謝謝 |
| 如果要一直循環下去,while(1);放在最后使程序停止在這里(進入循環),所以只打印輸出1次; |
| return 0;這條語句跳出循環了 |
|
哈哈哈,你如果只需要程序一直循環跑,那么就把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; } } |