main() { int n=4; while(--n)printf("%d ",--n); } 为什么把while中的(n--)改成(--n)就会出现乱码?

一直不停运行输出负数

//第一次循环
    while(--n)               //先执行--n,判断n=3,继续循环
    {
        printf("%d ",--n);   //先执行--n,结果n=2,再传递n值,输出为2
    }
//第二次循环
    while(--n)               //先执行--n,判断n=1,继续循环
    {
        printf("%d ",--n);   //先执行--n,结果n=0,再传递n值,输出为0
    }
//第三次循环
    while(--n)               //先执行--n,判断n=-1,继续循环,到此处n已经是负值,
    {
        printf("%d ",--n);   //先执行--n,结果n=-2,再传递n值,输出为-2
    }
    
    /********************************************************************/
    //第一次循环
    while(n--)               //先判断n=4,继续循环,再执行n--,结果n=3
    {
        printf("%d ",--n);   //先执行--n,结果n=2,再传递n值,输出为2
    }
    //第二次循环
    while(n--)               //先判断n=2,继续循环,再执行n--,结果n=1
    {
        printf("%d ",--n);   //先执行--n,结果n=0,再传递n值,输出为0
    }
    //第三次循环
    while(n--)               //先判断n=0,结束循环,再执行n--,结果n=-1
    {
        printf("%d ",--n);   
    }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-24
//第一次循环
while(--n) //先执行--n,判断n=3,继续循环
{
printf("%d ",--n); //先执行--n,结果n=2,再传递n值,输出为2
}
//第二次循环
while(--n) //先执行--n,判断n=1,继续循环
{
printf("%d ",--n); //先执行--n,结果n=0,再传递n值,输出为0
}
//第三次循环
while(--n) //先执行--n,判断n=-1,继续循环,到此处n已经是负值,
{
printf("%d ",--n); //先执行--n,结果n=-2,再传递n值,输出为-2
}
/********************************************************************/
//第一次循环
while(n--) //先判断n=4,继续循环,再执行n--,结果n=3
{
printf("%d ",--n); //先执行--n,结果n=2,再传递n值,输出为2
}
//第二次循环
while(n--) //先判断n=2,继续循环,再执行n--,结果n=1
{
printf("%d ",--n); //先执行--n,结果n=0,再传递n值,输出为0
}
//第三次循环
while(n--) //先判断n=0,结束循环,再执行n--,结果n=-1
{
printf("%d ",--n);
}