C++,新手求助,一个很简单的问题帮我解释一下

求输出1000以内各个位数相加等于9的数字。下面是我打的,我想每5个数空一行,上面的程序能达到想要的结果,下面的不行,但我不懂导致这两种不同结果的原因是什么,它们有什么区别,麻烦解释一下,谢谢,

#include <stdio.h>
int main(void)
{
    int i,a=0,b=0,c=0,sum,x=0;
    for(i=0;i<=999;i++)
    {
        a=i%10;
        b=(i/10)%10;
        c=i/100;
        sum=a+b+c;
        if(sum==9)
        {
            printf("%d,",i);
            x++;
      if(x%5==0)
            printf("\n");
        }
    }
}
#include <stdio.h>
int main(void)
{
    int i,a=0,b=0,c=0,sum,x=0;
    for(i=0;i<=999;i++)
    {
        a=i%10;
        b=(i/10)%10;
        c=i/100;
        sum=a+b+c;
        if(sum==9)
        {
            printf("%d,",i);
            x++;
        }
        if(x%5==0)
            printf("\n");
    }
}

你这样写输出换行的判断要注意求余=0的各种情况,通过分析可知第一循环i=0,x=0,第二循环i=1, x=0;这样的情况
可以改一下判断条件:
if(x==5) {x=0;printf("\n");}你再试看会不会?

作用域问题,第一个方法,吧第二个if限制在第一个if条件里面,后面这份代码,会对for循环的每一次都去判定,会导致多输出换行

sum增加了才要考虑排版换行问题,如果sum不增加,那x的值也不会变,会出现多余换行问题。