C打印空间金字塔

标签 c

我要打印这个:

***********
***** *****
****   ****
***     ***
**       **
*         *

但我得到的是:

     ****
*    ***
**   **
***  *
****

这是我的代码:

#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/

相关文章:

python - datetime.datetime.strptime() 使用可变输入长度

c - 通过指针表示法写入二维数组

c++ - MSVC 中的不透明指针会生成编译器错误

c - 将字符串拆分为C中的单词数组

规范上下文中的 C 结构大小

c - 将用户输入的字符串写入 C 文件

c - 解析由逗号分隔的表 txt 文件组成的数组

c - arr[0] = arr[1] = C 中的值是不好的做法吗?

c - 如何在 c 中创建一个未知数组长度和未知字符串长度的字符串数组?假设内存足够

c++ - C/C++ - 共享内存中的环形缓冲区(POSIX 兼容)