第二个循环的换行打印了多次

问题遇到的现象和发生背景

#include <stdio.h>
int main(void){
    int i=0,n=0,h=0,p,l;
    int f=0;
    scanf("%d",&i);
    int a[40]={0};
    int k=i/2,u=i+1;
        for(l=1;l>0;l=l+2)
        {
            k=k-l;
            if(k<0)break;
            a[n]=l;
            u-=2*a[n];
            n++;
        }
        p=n;
   while(i)
   {
        for(int m=h;m>0;m--)
        {
            printf(" ");
        }
        h++;
        //printf("%d\n",h);
        for(int j=1;j<=a[n];j++){
       printf("*");
       }
       n--;
       printf("\n");
       
       if(n==-1){
       n=0;
       h--;
       while(i)
       {
        h--;
            for(int m=h;m>0;m--)
        {
            printf(" ");
        }
           n++;
        for(int j=1;j<=a[n];j++)
        {
            if(a[n-1]==a[p])
           {
               printf("c");
                   i=0;break;
           }
            printf("*");
            //f++;
           }
           printf("\n");
           f++;
       if(i==0)break;
       //printf("\n");
       }
        }
    }
    printf("%d\n",f); 
    printf("%d",u);


}

问题相关代码,请勿粘贴截图

img

运行结果及报错内容

img


img

我的解答思路和尝试过的方法
我想要达到的结果

你题目的解答代码如下:


#include <stdio.h>
int main(void){
    int n,i,j,k=1,m=1,p,r;
    char c;
    scanf("%d %c",&n,&c);//要输入一个整数和一个符号
    if (n<=0)
    {
        printf("0\n");
        return 0;
    }
    while(m<=n)
    {
        p = m;
        r = k;
        k++;
        m += (k*2-1)*2;
    }
    for (i = r; i > 1 ; i--)
    {
        for (j = 1; j <= r-i; j++)
            printf(" ");
        for (j = 1; j <= 2*i-1; j++)
            printf("%c",c);
        printf("\n");
    }
    for (i = 1; i <= r; i++)
    {
        for (j = 1; j <= r-i; j++)
            printf(" ");
        for (j = 1; j <= 2*i-1; j++)
            printf("%c",c);
        printf("\n");
    }
    printf("%d\n",n-p);
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

应该是printf("\n");的位置放的不对。你的代码运行结果也不对,代码修改如下:

img

#include<stdio.h>
#include<math.h>
void shalou(int n,char c)
{
    int i,j,k,p;
    for(i=0,p=n;i<n;i++,p--)
    {
        for(j=0;j<i;j++)
        {
            printf(" ");
        }
        for(k=2*p-1;k>0;k--)
        {
            printf("%c",c);
        }
        printf("\n");
    }
    for(i=n-2,p=2;i>=0;i--,p++)
    {
        for(j=0;j<i;j++)
        {
            printf(" ");
        }
        for(k=0;k<2*p-1;k++)
        {
            printf("%c",c);
        }
        printf("\n");
    }
}
int main()
{
    int n,i,yu;
    char c;
    scanf("%d %c",&n,&c);
    for(i=1;;i++)
    {
        if(i*i*2-1>=n) break;
    }
    if(i*i*2-1>n)
    {
        i--;
        yu=n-(i*i*2-1);
    }
    shalou(i,c);
    printf("%d",yu);
    return 0;
}