C星号印刷金字塔

时间:2015-01-30 19:08:26

标签: c

void drawTriangle(int size){
    int k = 0;
    for(int i = 1; i <= size; i++){
        for(int j = 1; j <= size - i; j++){
            printf("  ");
        }
        while(k != 2*i-1){
            printf("* ");
            k++;
        }
        k = 0;
        printf("\n");
        }
    }
}
int main(void){
    drawTriangle(5);

    return EXIT_SUCCESS;
}

输出:

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

我期望获得的输出是:

  *
 ***
*****

我做错了什么?它基于宽度而不是行。任何帮助都会很棒。

感谢。

2 个答案:

答案 0 :(得分:1)

只需更改这两个printf语句:

printf("  ");
//...   ^^ Note 2 spaces
printf("* ");

到此:

printf(" ");
//...
printf("*");

将您的函数调用更改为:

drawTriangle(3);
           //^ If you want 3 layers and not 5

答案 1 :(得分:0)

如果我理解得很好,您希望函数drawTriangle(int size)绘制size星号的基础。

如果是这样,那么你应该改变整个循环的工作方式。一旦在一行上打印了size个星号,您的功能就应该停止,而不是在您打印size行时。

此外,正如评论和其他答案中所述,如果您希望输出看起来与您放置的输出完全相同,那么您应该删除printf("* ");中的尾随空格。