找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3244|回复: 13
收起左侧

C语言程序执行顺序问题

[复制链接]
ID:708768 发表于 2020-10-30 13:43 | 显示全部楼层 |阅读模式
  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,继续循环,但是循环只走了一次,我的逻辑是哪里出错了,请指出,谢谢
回复

使用道具 举报

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

总程序运行次序

总程序运行次序

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次;
回复

使用道具 举报

ID:708768 发表于 2020-10-30 17:29 | 显示全部楼层
xuchaopan 发表于 2020-10-30 15:46
哈哈哈,你如果只需要程序一直循环跑,那么就把while(1)放在do的位置,do不要就可以了。
像这样:
# incl ...

看到了,谢谢
回复

使用道具 举报

ID:654028 发表于 2020-10-31 16:15 | 显示全部楼层
feelings 发表于 2020-10-30 17:31
关于循环的程序我还有一个问题,图在下方
整个程序在板子上运行时,在两层的for循环语句里,每次第一层走 ...

debug调试一下吧
回复

使用道具 举报

ID:830240 发表于 2020-10-31 17:04 | 显示全部楼层
把return 0去掉或者注释掉,程序运行到return它就返回函数口,不再执行下面的语句,也就不会判断while是否为真了
回复

使用道具 举报

ID:420836 发表于 2020-11-1 06:19 | 显示全部楼层
那是while(1)和do-while(1)之间的区别
回复

使用道具 举报

ID:708768 发表于 2020-11-2 10:29 | 显示全部楼层

我用keil调试后,在第二张图的221行和223行放断点,在watch中看 i 和 j 的值,然后同样是在走第二遍循环时, i 和 j 的值显示cannot evaluate
回复

使用道具 举报

ID:708768 发表于 2020-11-2 15:02 | 显示全部楼层
feelings 发表于 2020-10-30 17:31
关于循环的程序我还有一个问题,图在下方
整个程序在板子上运行时,在两层的for循环语句里,每次第一层走 ...

当我去掉循环里的延时函数,以及定义pulse里面的延时函数是,就没有这个问题了,但是我又需要延时操作,要怎么改程序
回复

使用道具 举报

ID:833190 发表于 2020-11-2 19:59 | 显示全部楼层
你把return 0放在while的下一行就行,你现在放在while前面了,当跳出里面的for循环后就执行了return 0,这个程序就直接结束了,不会执行后面的while判断。
回复

使用道具 举报

ID:833190 发表于 2020-11-2 20:15 | 显示全部楼层
feelings 发表于 2020-11-2 15:02
当我去掉循环里的延时函数,以及定义pulse里面的延时函数是,就没有这个问题了,但是我又需要延时操作, ...

可能是你延时过长,当下一次采集到的str[11]时,上一次还没执行完,但是又进行了if判断。你设置一个标志位,当str[11]满足条件时,标志位为1,当执行完全部for循环后清除标志位。用这个标志位作为if里面的条件。
回复

使用道具 举报

ID:837937 发表于 2020-11-2 20:15 | 显示全部楼层
for循环走完后,有return就直接跳出main函数了,所以只走了一次,把return删掉
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表