Nexus2004_1 2023-02-28 23:06 采纳率: 100%
浏览 21
已结题

关于单片机延时函数的问题,改成这种形式。

为什么会一直输出0呀,不应该只能跳出1次内循环吗,就算后面跳出内循环也应该输出负数,这是为什么?
而且把输出语句放进内循环里面,内循环就跳不出了,而且会输出负数,为什么?

#include<stdio.h>
void main()
{
    int j;
    j = 138;
    do
    {
        while (--j);
        printf("%d",j);
    } while (1);
} 
  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-28 23:12
    关注

    该回答引用ChatGPT

    这个程序的输出结果会一直输出负数,原因是:

    当 j 减小到 0 时,再次执行 --j 时,j 的值会变成 -1,由于 -1 不等于 0,内循环会一直执行下去,直到 j 的值变成了 -2147483648,即 INT_MIN。此时再执行 --j 时,j 的值会变成 INT_MAX,即 2147483647,内循环才会退出。因此,程序的输出结果会一直输出负数,直到输出 -2147483648 后才会输出正数。

    如果你把输出语句放进内循环里面,内循环就会一直执行下去,因为 j 的值不会等于 0,所以内循环不会退出,导致程序一直卡在那里输出负数。同时,由于内循环的执行次数非常多,可能会导致程序卡死或崩溃。

    在内循环里添加一个判断语句,当 j 的值等于 0 时跳出内循环,或者使用 break 语句跳出内循环,以避免程序的不必要执行。同时,也不要忘记在 main 函数结束前添加 return 0; 语句,以保证程序的正常退出。

    #include <stdio.h>
    
    int main() {
        int j = 138;
        do {
            while (--j) {
                printf("%d ", j);
                if (j == 0) {
                    break;
                }
            }
            j = 138; // 重新赋值 j
        } while (1);
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月28日
  • 赞助了问题酬金20元 2月28日
  • 创建了问题 2月28日

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)