アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のプログラムを実行するとコマンドプロントになにも表示されず、強制終了しなければならなくなってしまいます。
whileのところがおかしいのはわかったのですが、この書き方の何がいけないのかが分かりません。
初歩的な質問で申し訳ありませんが、回答していただけると有難いです。

#include <stdio.h>

int main(void){
int count, i;
printf("何段ですか?");
scanf("%d", &count);

for(i = 1; i <= count; i++){
while(i-- > 0){
putchar('*');
}
putchar('\n');
}
return 0;
}

A 回答 (4件)

変数 i を段数のカウント用に使っているようですが、


for文の中にあるwhile文のループで
i が0になるまで減らしてしまっているため、
いつまでたってもfor文のループを抜けることができません。
下記のように別の変数を導入すれば、うまくいくと思います。
なお、改行を入れる場所がまずかったので修正してあります。

#include <stdio.h>

int main(void)
{
int count, n, i;

printf("何段ですか?");
scanf("%d", &count);

for (i = 1; i <= count; i++) {
n = i;
while (n-- > 0) {
putchar('*');
}
putchar('\n');
}
return 0;
}
    • good
    • 0
この回答へのお礼

そういうことだったんですね!ようやく理解できました。
ご回答ありがとうございました。

お礼日時:2013/05/29 19:04

ループのための変数は別々に管理すべきでしょう。


あとこの場合なら while より for 構文のほうが適しているかと思います。

int i,j;
for (i = 1; i <= count; i++) {
 for (j = 0; j < i; j++) {
  putchar('*');
 }
 putchar('\n');
}
    • good
    • 1
この回答へのお礼

>ループのための変数は別々に管理すべきでしょう。

そういうものなんですね!大変勉強になります。
ご回答ありがとうございます。

お礼日時:2013/05/29 19:06

【別解】


このコードは、出力画面をxy平面と見立てて、
不等式が表わす領域に対して'*'を出力することによって
直角三角形を書くようになっています。
この考え方を応用すると、正方形・長方形・ひし形などの
比較的単純な図形が、不等式の部分を修正するだけで
書けるようになります。


#include <stdio.h>

int main(void)
{
int count, x, y;

printf("何段ですか?");
scanf("%d", &count);

for (y = count - 1; y >= 0; y--) {
for (x = 0; x < count; x++) {
putchar((y <= -x + count - 1) ? '*' : ' ');
}
putchar('\n');
}
return 0;
}
    • good
    • 0
この回答へのお礼

>出力画面をxy平面と見立てて

こういう方法もあるんですね。これならいろいろ表示させられそうです。
参考にさせていただきます。ありがとうございます。

お礼日時:2013/05/29 19:17

失礼しました。



>なお、改行を入れる場所がまずかったので修正してあります。

このくだりは無視してください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!