为什么我这个打印不出来完整的空心菱形?要改哪里??

#include<stdio.h>
void main(){
    int a,b,c,d;
    printf("请输入一个值");
    scanf("%d",&b);
    for(a=1;a<=b;a++){//层数
        for(d=1;d<=b-a;d++){
        printf(" ");
        }
        for(c=1;c<=2*a-1;c++){
            if(c==1||c==2*a-1){
                printf("*");}
            else{
            printf(" ");
            }
        }
        printf("\n");
    }
        for(a=1;a<=b-1;a++){//层数
        for(d=1;d<=a;d++){//空格数
        printf(" ");
        }
        for(c=1;c<=2*a+1;c++){//每一行的*数
            if(c==1||c==2*a+1){
                printf("*");
            }else{
            printf(" ");
            }
            
            
        }
        printf("\n");
    }

        getchar();
        getchar();
}

int a,b,c,d;
        printf("请输入一个值");
        scanf("%d",&b);
        for(a=1;a<=b;a++){//层数
            for(d=1;d<=b-a;d++){
            printf(" ");
            }
            for(c=1;c<=2*a-1;c++){
                if(c==1||c==2*a-1){
                    printf("*");}
                else{
                printf(" ");
                }
            }
            printf("\n");
        }
            for(a=b-1;a>=1;a--){//层数
            for(d=1;d<=b-a;d++){//空格数
            printf(" ");
            }
            for(c=1;c<=2*a+1;c++){//每一行的*数
                if(c==1||c==2*a-1){
                    printf("*");
                }else{
                printf(" ");
                }


            }
            printf("\n");
        }

            getchar();
            getchar();

 

逻辑有点问题,试试这个吧

#include <stdio.h>

int main(){
    int width;
    printf("请输入一个值\n");
    scanf("%d\n",&width);
    if(width % 2  == 0){
        width += 1;
    }
    for(int i = 0; i != width; i ++){
        for(int j = 0 ; j != width; j++){
            if( j == (width/2 -i) || j == (width/2 + i) || j == (i - width/2) || j == (width/2 *3 -i))
            {
                printf("*");
            }
            else{
                printf(" ");
            }
        }
        printf("\n");
    }
    getchar();
    return 0;
}

 

#include<stdio.h>
void main(){
    int a,b,c,d;
    printf("请输入一个值:");
    scanf("%d",&b);
    for(a=1;a<=b;a++){//层数
        for(d=1;d<=b-a;d++){
            printf(" ");
        }
        for(c=1;c<=2*a-1;c++){
            if(c==1||c==2*a-1){
                printf("*");}
            else{
                printf(" ");
            }
        }
        printf("\n");
    }
//下半部部分
    int b2 = b - 1; //层数少一层
    int k = 2*b2 +1; // 最多
    for(a=1;a<= b2;a++){//层数
        for(d=1;d<=a;d++){//空格数
            printf(" ");
        }
    //这个地方改成了c=d
        for(c=d;c <= k; c++){//每一行的*数
            if(c==d || c == (k - d + 1)){
                printf("*");
            }else{
                printf(" ");
            }
        }
        printf("\n");
    }

}

 

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html