这个程序后半部分的“空格”为什么是对齐的?解决方案

这个程序后半部分的“空格”为什么是对齐的?
我写的这个程序,目的是使之输出字母菱形,行数是通过输入数字确定的,
正确图案应该是这样的:        
        A
      ABC
    ABCDE
  ABCDEFG
    ABCDE
      ABC
        A
程序如下:
#include   <stdio.h>
void   main()
{
int   a,b,c,d,n;             //定义行数,空格数,每行个数,字符值。
printf( "请输入行数: ");
scanf( "%d ",&n);
for   (a=1;a <=n;a++)
{
for   (b=1;b <=n-a;b++)
printf( "   ");

                        d=65;
                        for   (c=1;c <=a*2-1;c++)
{
printf( "%c ",d);
d++;
}
printf( "\n ");
}
                                                                                    //前半部分,无错;

for   (a=1;a <=n-1;a++)
{
for   (b=1;b <=a;b++);
printf( "   ");

d=65;
for   (c=1;c <=(n*2-1)-2*a;c++)
{
printf( "%c ",d);
d++;
}
printf( "\n ");
}
}

后半部分输出的空格,全是对齐的,成了这样:
……
  ABCDE
  ABC
  A
这是怎么回事啊?


------解决方案--------------------
for (b=1;b <=a;b++);
_____________________________
for (b=1;b <=a;b++)