初学者的c语言问题,如图

图片说明

 #include <stdio.h>
int main()
{
    int i,j,k,ch,n;
    printf("请输入行数:");
    scanf("%d",&n);
    for(i=1;i<n+1;i++)
    {
        for(k=1;k<n+1-i;k++)
        {
            printf(" ");
        }
        for(j=1,ch='A';j<=i;j++,ch++)
        {
            printf("%c",ch);
        }
        ch=ch-2; //关键
        for(j=1;j<i;j++,ch--)
        {
            printf("%c",ch);
        }
        printf("\n");
    }

    for(i=1;i<n;i++)
    {
        for(k=1;k<=i;k++)
        {
            printf(" ");
        }
        for(j=n,ch='A';j>i;j--,ch++)
        {
            printf("%c",ch);
        }
        ch=ch-2;
        for(j=n;j>i;j--,ch--)
        {
            printf("%c",ch);
        }
        printf("\n");
    }

}

为什么会出现右边的@啊

下半部分有个地方多循环了一次,打印一行的后半部分应该比前半部分少循环一次(改的地方我标注在代码里了)

#include <stdio.h>
int main()
{
    int i,j,k,ch,n;
    printf("请输入行数:");
    scanf("%d",&n);
    for(i=1;i<n+1;i++)
    {
        for(k=1;k<n+1-i;k++)
        {
            printf(" ");
        }
        for(j=1,ch='A';j<=i;j++,ch++)
        {
            printf("%c",ch);
        }
        ch=ch-2; //关键
        for(j=1;j<i;j++,ch--)
        {
            printf("%c",ch);
        }
        printf("\n");
    }

    for(i=1;i<n;i++)
    {
        for(k=1;k<=i;k++)
        {
            printf(" ");
        }
        for(j=n,ch='A';j>i;j--,ch++)
        {
            printf("%c",ch);
        }
        ch=ch-2;
        for(j=n;j>i;j--,ch--)//应该改成for(j=n;j-1>i;j--,ch--)
        {
            printf("%c",ch);
        }
        printf("\n");
    }

} 

for(j=n,ch='A';j>i-1;j--,ch++)