又是又是一个白丝不得其解的大问题!!

这次是PTA打印沙漏的题,我大部分都是对的,但是PTA说的我还有一个错误,如果大家有空可以帮我看看我的问题出在哪里吗?
源代码如下:
#include
int main()
{
int n, cha = 0;
char ch;
scanf("%d %c", &n, &ch);

if(n == 1)
{
    printf("%c",ch);
}
else
{
    int sum = 1, hang = 2;
    for(hang = 2; ; hang ++)
    {
        sum += 2 * (2 * hang - 1);
        if(sum >= n)
            break;
    }
    if(sum > n)
    {
        sum -= 2 * (2 * hang - 1);
        hang = hang - 1;
        cha = n - sum;
    }

    int h = hang;
    for(h; h >= 1; h --)
    {
        int k = 2 * h - 1, l = hang - h;
        for(l; l > 0; l --)
            printf(" ");
        for(k; k > 0; k --)
        {
            printf("%c",ch);
        }
        printf("\n");
    }


    int a = 2;
    for(a; a <= hang; a ++)
    {
        int k = 2 * a - 1, l = hang - a;
        for(l; l > 0; l --)
            printf(" ");
        for(k; k > 0; k --)
        {
            printf("%c",ch);
        }
        printf("\n");
    }

    if(cha != 0)
        printf("%d",cha);
}

return 0;

}
以下是PTA的报错:

img

部分运行结果:

img

img

img

img

是不是末尾空行引起的,改下面试试
45行printf("%c",a!=hang?'\n':0);
49行printf("\n%d", cha);

    最后的问题有两个,第一,我不知道如果差为0要输出,第二,如果为1,则字符和差在同一行。感谢你的帮助