- ベストアンサー
プログラミングの間違いを…
度々の似たような発言、大変申し訳ありません。お許し下さい。 もう1つ実行が上手く出来ないプログラムがある事を忘れていました。以下のプログラムについても、まだまだ未熟な私には間違っている箇所が全く分からないので、C言語プログラミング熟練者の方々、どうか指摘して下さると有り難いです。宜しくお願い致します。 ●for文の2重ループを使い、入力された星の行数に対して、下図のような表示になるようなプログラム。なお、このプログラムでは、中のループで表示するスペースの数を変え、その後にアスタリスクを表示している。 星の行数を入力してください。 6 * * * * * * (1)整数型変数のi,j,noを宣言する (2)“星の行数を入力して下さい。”と表示し、入力された値をnoに読み込む (3)for文により、カウンターiが1からnoまで、(4)、(6)の処理を繰り返す (4)for文により、カウンターjが1からi未満まで、(5)の処理を繰り返す (5)半角スペース1つ(“ ”)を表示する (6)半角のアスタリスクを表示し、改行する #include <stdio.h> main(void) { int i,j,no; printf("星の行数を入力して下さい。\n"); scanf("%d",&no); for(i=1;i<=no;i++){ for(j=1;j<i;i++){ printf(" \n"); } printf("*"); printf("\n"); } }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
for(初期設定式,条件式,再設定式){文} の動作は理解していますか? (1)初期設定式を最初の1回だけ行う (2)条件式を評価して真なら(3)へ、偽なら終わり (3)forの{文}を実行する (4)再設定式を実行して(2)へ forがネストしている(forの中にforがある)場合でも、変数iとjは同じものなので、中のforでiを変更すると外のforに影響が出ます。 printfで"\n"は改行になります。ループの中でスペースを連続して表示させたいのであれば改行してはいけません。
その他の回答 (3)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> (5)半角スペース1つ(“ ”)を表示する > printf(" \n"); ここがマチガイ。これでは空白と改行を出力します。
- alphion
- ベストアンサー率19% (27/136)
printf(" \n"); <==== \nは改行してしまいます。 for(j=1;j<i;i++){ <==== i++ではなくj++ 試していませんが、そんなところかと…
- kyrsche
- ベストアンサー率41% (7/17)
実行してみたところ、無限ループを起こしているようです。 ループの終了条件を確認してみてください。 期待通りの動作になるためには、上の条件の見直しを 含めて、全体で二箇所修正しました。 ループが解決したら、あとはすぐだと思います。 #なんとなく学校の課題っぽいので適当にはぐらかしてみました(^_^;;