如何在C中左对齐一组字符

时间:2015-10-02 09:57:02

标签: c

我是C的新手,我一直试图以正确的对齐方式打印使用for循环和printf()的金字塔;像这样;

  *
 **
***

我只能这样做

   *
   **
   ***

3 个答案:

答案 0 :(得分:1)

#include<stdio.h>
    int main()
    {
        int i,j,k;

        for(i=1;i<=5;i++)
        {           
            for(j=5;j>i;j--)
            {
                printf(" ");
            }

            for(k=1;k<=i;k++)
            {
                printf("*");
            }

            printf("\n");
        }
        return 0;
    }

这里第一个for循环创建的行为5.第二个for循环执行间距,第三个for循环打印星号。

当 i = 1; j从5变为2并打印空格。在此k = 1之后,它打印出一颗星。

i = 1; j = 5,4,3,2; k = 1
i = 2; j = 5,4,3  ; k = 1,2
.
.
i = 5; j = 0; k = 1,2,3,4,5

这里&#34; - &#34;代表一个空白区域。 所以它就像这样:

----*
---**
--***
-****
*****

答案 1 :(得分:1)

您可以使用注释中提到的printf格式说明符技巧,也可以使用基本for循环执行此操作。逐步分解问题。首先是给定行数的循环,然后是每行中空格的循环,然后是每行中星号的循环。这是代码:

#include <stdio.h>

int main(){
    int max_stars = 3;

    // for every line
    for(int i=1; i<=max_stars; ++i){

        // print max_stars - i spaces
        for(int j=1; j<= max_stars-i; ++j){
            printf(" ");
        }

        // print i stars
        for(int j=1; j<=i; ++j){
            printf("*");
        }

        //print a new line
        printf("\n");
    }
    return 0;
}

答案 2 :(得分:0)

#include <stdio.h>
#include <string.h>

void f(int n)
{
    int x = 1 , y , var ;

    while( n > 0 )
    {
        for( var = n-1 ; var > 0 ; var-- )
        {
            fputc(' ',stdout);
        }

        for( y = 0 ; y < x ; y++ )
        {
            fputc('*',stdout);
        }

        fputc('\n',stdout);

        n--;

        x++;
    }
}

int main(void)
{
    f(3);

    return 0;

}