这个循环究竟怎么运行的,可以具体叙述一下吗?

问题遇到的现象和发生背景

这个循环究竟怎么运行的,可以具体叙述一下吗?我手算结果与计算机给出的结果一直不一样,麻烦看看我的注释对不对

遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include<stdio.h>

int main()
{
    int a = 2, b = 1;
    while (a-- != -1)   //a先自减再判断a是否为-1
        do
        {
            b *= a;
            b++;
        } while (a--);   //while(a--)的意思是先判断a是否为0再自减
        printf("%d %d", a, b);
        return 0;
}
运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

两层循环,while的循环体是 do..while 循环;a--是先取 a 的值使用之后再自减一。
1、while (a-- != -1) 条件成立,a--变成1,执行循环体 do...while
2、b *= a 得 b 等于1,b++变成2,while(a--) 条件成立,a--变成0,继续执行 do
3、b *= a 得 b 等于0,b++变成1,while(a--) 条件不成立,a--变成-1,do...while循环退出,返回执行外层循环 while(a-- != -1),条件不成立,a--变成-2,退出循环。
所以,结果是 a=-2,b=1

拆解一下while里的内容就是判断a!= -1再a--