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

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

#include
void main()
{
    int j;
    j = 138;
    do
    {
        while (--j);
        printf("%d",j);
    } while (1);
} 

该回答引用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;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^