c语言打印菱形,*号对不齐,循环也有些问题

本来打算先编菱形的上半部分,编完了发现对不齐,而且循环也有问题,就没有往下编,求解答
#include <stdio.h>
int main()
{
int a,n,b,c,d,e=0;
scanf("%d",&n);
for(a=n,d=1;a<=n&&a>0;a--,d++)
{
for(b=1,c=0;b<a-c-e;c++)
{
printf(" ");
}
for(b=1,c=1;b<=c;c=c+2)
{
if(d%2!=0)
{
printf("*");
}

        if(c>=(2*d-1))
        {
            break;
        }
    }
    if(d%2!=0)
    {
        printf("\n");
    }
    else
    {
        e=e+1;
        a=a+e;
    }
    
}
return 0;

}

输入: 3
应得到: *
***
*****
***
*
实际得到: *
***
*****
*******

输入:4
应得到: *
***
*****
*******
*****
***
*
实际得到: *
***
*****
*******

你为什么要定义3个变量来控制缩进,一个就够了呀
假如n是边长
第1行就是n-1个空格,1个*
第2行是n-2个空格,3个*
第n0个空格,n*2-1个*