質問: * 「*」をno個出力する関数 `void put_stars(int no)` * 半角スペースをno個出力する関数 `void put_spaces(int no)` * 高さnの右下が直角な二等辺三角形を「*」で描く `void put_triangle3(int n)` とするとき、自分のプログラムではうまく行きませんでした。 実行例は次のようになれば良いです。 ``` $ ./a.out 何段ですか? 2 * ** ``` しかし、自分のプログラムでは、`put_spaces`関数があってもなくても、同じように以下のようになりました ``` $ ./a.out 何段ですか? 2 ** * ``` このような感じで、`put_spaces`関数がうまく機能していないように思えたのですが、実行例のように表示させるには`put_spaces`関数をどのように書いたら良いのでしょうか。 ``` void put_stars(int no) { int i; for(i=no;i>=1;i--) printf("*"); } void put_space(int no) { int i; for(i=no-1;i>=1;i--) printf(" "); } void put_triangle(int n) { int i; for(i=n;i>=1;i--) { put_stars(i); printf("\n"); } return; } int main(void) { int ln; printf("何段ですか? "); scanf("%d",&ln); put_triangle(ln); return 0; } ```
回答: プログラムを記述する前に、必要な手順を洗い出して、言葉で説明してみることをおすすめします。 高さが `HEIGHT` 段の時、1行辺りに表示する文字数は(HEIGHTと同じ) `WIDTH` 個。 `n` 段目で表示する... * `*` はそのまま `n` 個 * (半角スペースは) ~~`n` 個~~ ではなく、`WIDTH - n` 個、と考える