双金字塔图案:未获得所需的输出

时间:2013-08-15 11:35:22

标签: c

我没有为我的C程序获得所需的输出任何人都可以查看代码并帮我纠正错误吗?

我的代码的所需输出和实际输出是:

enter image description here

我的代码是:

#include <stdio.h>
#include <conio.h>
void main()
{
int i,j,k;
int blank=0;
int lines = 6;
char symbol='A';
int temp ;
int diff[7]= {0,1,3,5,7,9,11};
k=0;

for(i=lines;i>=0;i--)
{
   printf("\n");
   symbol = 'A';

   for(j=i;j>=0;j--)    
        printf("%c ",symbol++);

   blank = diff[k++];   

   for(j=0;j<blank;j++)
        printf(" ");    


   symbol = 'F' - (blank/2);

   if (blank== 0)
       temp = i-1;
   else
       temp = i;

   for(j=0;j<=temp;j++)  
       printf("%c ",symbol--);

}
getch();
}

5 个答案:

答案 0 :(得分:2)

首先,您正在打印错误数量的空白。你需要的数字可以通过一小段算术来计算出来。

其次,你不需要那么混乱的计算就可以计算出第一个符号,以便在空白之后打印出来,因为你已经完成了它。

(编辑所以downvote可以撤回)

答案 1 :(得分:2)

您已经以正确的方式编写了代码。你必须改变行

for(j=0;j<blank;j++)
    printf(" ");  

for(j=0;j<blank;j++)
    printf("  ");   // increase one more space 

并尝试避免使用void main()。这是您编辑过的代码;

#include <math.h>
#include <stdio.h>

int main()
{
    int i,j,k;
    int blank=0;
    int lines = 6;
    char symbol='A';
    int temp ;
    int diff[7]= {0,1,3,5,7,9,11};
    k=0;

   for(i=lines;i>=0;i--)
   {
       printf("\n");
       symbol = 'A';

       for(j=i;j>=0;j--)    
           printf("%c ",symbol++);

       blank = diff[k++];   

       for(j=0;j<blank;j++)
           printf("  ");    


       symbol = 'F' - (blank/2);

      if (blank== 0)
          temp = i-1;
      else
          temp = i;

    for(j=0;j<=temp;j++)  
        printf("%c ",symbol--);

   }
return 0;
}

不要忘记包含标题。

答案 2 :(得分:2)

问题出在这里

for(j=0;j<blank;j++)
    printf(" ");    
            ^
            A

您只打印一个空格,应该两个。因此,一个空格对应于字母,另一个对应于实际空间

   printf("  "); 
           ^^
           A(space)

答案 3 :(得分:0)

您需要使用更多空格

使用0,2,6 ......等等

答案 4 :(得分:-1)

你的“diff”数组太小了。您要考虑图案左侧缺少的字符,而不是右侧。尝试制作前三个元素{0, 2, 6...}并查看是否有效,然后从那里开始推断出正确的模式