标题: C语言程序执行顺序问题 [打印本页]

作者: feelings    时间: 2020-10-30 13:43
标题: 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,继续循环,但是循环只走了一次,我的逻辑是哪里出错了,请指出,谢谢

作者: xuchaopan    时间: 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;
}
}
作者: 张小不懂    时间: 2020-10-30 16:10
return 0;这条语句跳出循环了
作者: zhb2004xp    时间: 2020-10-30 16:36
如果要一直循环下去,while(1);放在最后使程序停止在这里(进入循环),所以只打印输出1次;
作者: feelings    时间: 2020-10-30 17:29
xuchaopan 发表于 2020-10-30 15:46
哈哈哈,你如果只需要程序一直循环跑,那么就把while(1)放在do的位置,do不要就可以了。
像这样:
# incl ...

看到了,谢谢
作者: feelings    时间: 2020-10-30 17:31
关于循环的程序我还有一个问题,图在下方
整个程序在板子上运行时,在两层的for循环语句里,每次第一层走第一遍没问题,第二层走完十次,再次进行第一层进行判断循环时,第二层循环有时候走一次,有时候走两次,或者不走,然后整个程序就停住了,这是什么原因

mmexport1604049449144.jpg (808.97 KB, 下载次数: 103)

总程序运行次序

总程序运行次序

mmexport1604049600489.jpg (382.96 KB, 下载次数: 100)

for循环嵌套

for循环嵌套

作者: 心有浮生    时间: 2020-10-31 16:15
feelings 发表于 2020-10-30 17:31
关于循环的程序我还有一个问题,图在下方
整个程序在板子上运行时,在两层的for循环语句里,每次第一层走 ...

debug调试一下吧

作者: YQR123    时间: 2020-10-31 17:04
把return 0去掉或者注释掉,程序运行到return它就返回函数口,不再执行下面的语句,也就不会判断while是否为真了
作者: TTQ001    时间: 2020-11-1 06:19
那是while(1)和do-while(1)之间的区别
作者: feelings    时间: 2020-11-2 10:29
心有浮生 发表于 2020-10-31 16:15
debug调试一下吧

我用keil调试后,在第二张图的221行和223行放断点,在watch中看 i 和 j 的值,然后同样是在走第二遍循环时, i 和 j 的值显示cannot evaluate
作者: feelings    时间: 2020-11-2 15:02
feelings 发表于 2020-10-30 17:31
关于循环的程序我还有一个问题,图在下方
整个程序在板子上运行时,在两层的for循环语句里,每次第一层走 ...

当我去掉循环里的延时函数,以及定义pulse里面的延时函数是,就没有这个问题了,但是我又需要延时操作,要怎么改程序
作者: i_could_have    时间: 2020-11-2 19:59
你把return 0放在while的下一行就行,你现在放在while前面了,当跳出里面的for循环后就执行了return 0,这个程序就直接结束了,不会执行后面的while判断。
作者: i_could_have    时间: 2020-11-2 20:15
feelings 发表于 2020-11-2 15:02
当我去掉循环里的延时函数,以及定义pulse里面的延时函数是,就没有这个问题了,但是我又需要延时操作, ...

可能是你延时过长,当下一次采集到的str[11]时,上一次还没执行完,但是又进行了if判断。你设置一个标志位,当str[11]满足条件时,标志位为1,当执行完全部for循环后清除标志位。用这个标志位作为if里面的条件。
作者: cony2020    时间: 2020-11-2 20:15
for循环走完后,有return就直接跳出main函数了,所以只走了一次,把return删掉




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