空心菱形(C语言)不知道哪里出错了

我是分为两部分弄的,先弄上半部分菱形,再弄下半部分。上半部分运行成功了,但貌似成了死循环,一直不停,下半部分就没运行。不知道哪里出错了。请帮忙看一下,谢谢啦!

img

img


int main()
{
    int n = 5, i, k, j;
    // scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        for (k = 1; k <= n - i; k++)
            printf(" ");
        printf("*");
        if (i > 1)
        {
            for (j = 1; j <= 2 * i - 3; j++)
                printf(" ");
            printf("*");
        }
        printf("\n");
    }
    for (i = n - 1; i > 0; i--)
    {
        for (k = 1; k <= n - i; k++)
            printf(" ");
        printf("*");

        if (i > 1)
        {
            for (j = 1; j <= 2 * i - 3; j++)
                printf(" ");
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

可参考:https://blog.csdn.net/qq_39345244/article/details/104468086

#include <stdio.h>
#include <stdlib.h>

int hanshu(int x, int y, int n)
{
    if(abs(x)+abs(y)==n-1)
        return 1;
    else
        return 0;
}
int main()
{
    int n;
    scanf("%d",&n);
    int x,y;
    for (x=n-1; x>=-n+1; x--)
    {
        for (y = -n+1; y<=n-1; y++)
        {
            if(y>=0&&hanshu(x,y,n)==1)
            {
                printf("*\n");
                break;
            }
            else if(hanshu(x,y,n)==1)
                printf("*");
            else
                printf(" ");
        }
    }
    return 0;
}

供参考:

#include<stdio.h>
int main()
{
    int i, j, n;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        for (j = i; j < n; j++)
            printf(" ");
        for (j = 0; j <= 2 * i + 1; j++)
            printf("%c", (j == 0 || j == 2 * i) ? '*' : ' ');
        printf("\n");
    }
    for (i = n - 2; i >= 0; i--)
    {
        for (j = i; j < n; j++)
            printf(" ");
        for (j = 0; j <= 2 * i + 1; j++)
            printf("%c", (j == 0 || j == 2 * i) ? '*' : ' ');
        printf("\n");
    }
    return 0;
}

稍微改了一点点:

#include<stdio.h>
int main()
{
    int n,i,k,j;
    scanf( "%d",&n);
    for(i=1;i<=n;++i)
    {
        for(k=1;k<=n-i;++k)   
            printf(" ");
        if(i==1) 
            printf("*\n");
        else
        {
            printf("*");
            for(j=1;j<=2*i-3;++j)
                printf(" ");
            printf("*\n");
        }
    }
    for(i=1;i<=n-1;++i)
    {
        for(k=1;k<=i;++k)   //这里应该是++k
            printf(" ");
        if(i==n-1) 
            printf("*\n");
        else
        {
            printf("*");
            for(j=1;j<=2*(n-1)-(1+2*i);++j)   //这个地方j<7-2*n是不对的,要这样改才符合规律
                printf(" ");
            printf("*\n");
        }
    }
    return 0;
}

结果:

img