2016-10-10 4 views
-2

私はcs50の問題のセットをやっていましたので、出力の文字の右揃えに固執しました。Cの '#'文字の右揃え

私のプログラム(mario.c)のコードは次のとおりです。ここで

#include<stdio.h> 

int main(void) 
{ 
    int height=-1; 

    while(height<0 || height>23) 
    { 
     scanf("%d",&height); 
     printf("height: %d\n",height); 
    } 

    for(int i=1; i<=height; ++i) 
    { 
     for(int j=1;j<=i+1;++j) 
     { 
      printf("#"); 
     } 
     printf("\n"); 
    } 
} 

は私がしたい出力されます。

Output (that i want)

と私は取得しています出力:

Output (that i am getting)

謝辞私を助けてください。前もって感謝します。

+7

正しい番号を最初に印刷してください。 –

+0

スペースとハッシュの正確な量をループする代わりに、アスタリスクで示されたフィールドの幅と精度の指定子を試すことができます。それはあなたの割り当ての範囲外かもしれません。 –

答えて

0

printf空白。

for(int i = 1; i <= height; ++i) 
{ 
    for (int k = 1; k <= height - i; ++k) 
     printf(" "); 
    for(int j = 1; j <= i + 1; ++j) 
    { 
     printf("#"); 
    } 
    printf("\n"); 
} 
0

あなたは#秒の適切な量を含む文字列を取得し、使用してそのような良いと考えprintf format specifiersそれを印刷するsprintfを使用することができます。何が起こる

for (int i = 1; i <= height; ++i) 
{ 
    char *buf = malloc(i + 2); 
    buf[i+1] = '\0'; 
    for (int j = 0; j < i + 1; j++) 
    { 
    sprintf(buf + j, "#"); // add a new # character after the last one 
    }  
    printf("%*s\n", height + 1, buf); 
    free(buf); 
} 

を? printfのパラメータを見てみましょう。

"%*s"  // % means to start a placeholder 
      // * tells this placeholder to reserve at least as many 
      // characters as we tell it to via an variable 
      // s tells printf that this is a placeholder for a string 

height + 1 // reserver height + 1 character 

buf  // stores the correct ammount of # 
0

ので、あなたは右のアライン・データを印刷することができ、あなたのprintfに幅を追加します。

for(int i=1;i<=height;++i) 
{ 


    printf("%*c",(height + 1-i),'#'); //* to add width of size (height + 1-i) 

    for(int j=1;j<=i;++j) 
    { 

     printf("#"); 

    } 

    printf("\n"); 
}