- ベストアンサー
困っています
これを三段で実行してみたのですが、うまく表示できません。下のようになります。どこが間違っているか教えてください。お願いします。 * * * #include <stdio.h> int main(void) { int i, j, ln; printf("何段を表示しますか?"); scanf("%d", &ln); for(i=1; i<=ln; i++){ for(j=1; j<=ln-i; j++) putchar(' '); for(j=1; j<=i * 2 - 1; j++); putchar('*'); putchar('\n'); } return(0); }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ほとんど正解ですが不慣れでミスってるって感じですね 問題はここで ; を付けてしまっている事です for(j=1; j<=i * 2 - 1; j++); ; だけで1つの文として扱いますので for(j=1; j<=i * 2 - 1; j++); は ; 文を繰り返しているだけなんですつまり何もしていないのです。 この ; をはずせば for(j=1; j<=i * 2 - 1; j++) putchar('*'); putchar('*'); 文が繰り返されるので正解になります。 一度他の個所は変更せずここの ; だけはずして試してみてください。 人によってスタイルは違いますが通常は繰り返し文が1文の場合は for(j=1; j<=i * 2 - 1; j++)putchar('*'); と続けて記述します。上の行もそうですね。 for(j=1; j<=ln-i; j++)putchar(' '); でこんな感じになると思います。 int main(void) { int i, j, ln; printf("何段を表示しますか?"); scanf("%d", &ln); for(i=1; i<=ln; i++){ for(j=1; j<=ln-i; j++)putchar(' '); for(j=1; j<=i * 2 - 1; j++)putchar('*'); putchar('\n'); } return(0); } 偉そうに書いてますが動作確認はしてません。もしもの場合は御免なさい。
その他の回答 (4)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
#1回答者です。 回答の内容をちゃんと読んで、プログラムの内容を確認されましたでしょうか。
- tatsu99
- ベストアンサー率52% (391/751)
以下のようにしてください。 --------------------------------------- #include <stdio.h> int main(void) { int i, j, ln; printf("何段を表示しますか?"); scanf("%d", &ln); for(i=1; i<=ln; i++){ for(j=1; j<=ln-i; j++) putchar(' '); for(j=1; j<=i * 2 - 1; j++){ putchar('*'); } putchar('\n'); } return(0); }
- tatsu99
- ベストアンサー率52% (391/751)
すみません。 三段で実行してみた場合は、どのように*が表示されることを、期待していますか?
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
あなたの質問の内容では、表示が正しいのか間違っているのか、他人には分かりません。「ひょっとしたら間違いかもしれない場所」を修正しても、その結果得られる表示が正しいかどうかを判断することができません。 それは、質問では「間違いがある」ということだけしか言っておらず、どういう場合が正しいものであるかを説明していないからです。 さて、質問の中に「ひょっとしたら間違いかもしれない場所」が1つあります。それは3つ目のforの最後の【;】です。ここに【;】があっても文法的に間違いではありませんが、3つ目のforを使う意味がなくなってしまいます。
補足
これです。 * *** ***** 宜しくお願いします。
お礼
これです。 * *** ***** 宜しくお願いします。
補足
間違えました。これです。 * *** ***** 宜しくお願いします。