我要打印这个:
***********
***** *****
**** ****
*** ***
** **
* *
但我得到的是:
****
* ***
** **
*** *
****
这是我的代码:
#include<stdio.h>
int main()
{
int rows,i,j,space;
rows = 5;
//printf("Enter number of rows: ");
//scanf("%d",&rows);
for(i=rows;i>=1;--i)
{
for(space=0;space<rows-i;++space)
printf("*");
for(j=i;j<=2*i-1;++j)
printf(" ");
for(j=0;j<i-1;++j)
printf(" ");
printf("\n");
}
return 0;
}
这有什么问题吗?谁能帮我?我尝试了很多选项,但没有一个能打印出我想要的。谢谢
最佳答案
这里有一些错误。
首先让我们来解决您的第三个循环。该程序应打印星号、空格,然后再次打印星号,以便第三个循环不应该打印空格。此外,我们在空格的两侧打印相同数量的星星,因此第三个循环实际上只是与第一个循环完全相同的代码!
其次,在第二个循环的标题中:
for(j=i;j<=2*i-1;++j)
您缺少括号。根据操作顺序,这将计算为 (2*i)-1
,这不是您想要的。
这里还有一个棘手的警告!您会注意到示例输出的第一行有一个奇数 的星星,而其他每一行都有一个偶数!仅在第一行,我们只需要少打印一颗星!这意味着我们需要在我们的一个星形循环中使用此代码来忽略第一行的第一个星号:
if(i !=0 || space != 0) printf("*");
最后,我将您的外循环翻转为以另一种方式进行迭代,因为它看起来就是您想要的并且它有助于解决其他一些问题:
for(i=0;i<rows;++i)
{
for(space=0;space<rows-i;++space)
if(i!=0 || space != 0) printf("*");
for(j=0;j<2*(i-1)+1;++j)
printf(" ");
for(space=0;space<rows-i;++space)
printf("*");
printf("\n");
}
关于C打印空间金字塔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31253804/