• ベストアンサー

プログラミングの間違いを…

度々の似たような発言、大変申し訳ありません。お許し下さい。 もう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");   } }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

for(初期設定式,条件式,再設定式){文} の動作は理解していますか? (1)初期設定式を最初の1回だけ行う (2)条件式を評価して真なら(3)へ、偽なら終わり (3)forの{文}を実行する (4)再設定式を実行して(2)へ forがネストしている(forの中にforがある)場合でも、変数iとjは同じものなので、中のforでiを変更すると外のforに影響が出ます。 printfで"\n"は改行になります。ループの中でスペースを連続して表示させたいのであれば改行してはいけません。

その他の回答 (3)

回答No.3

> (5)半角スペース1つ(“ ”)を表示する >      printf(" \n"); ここがマチガイ。これでは空白と改行を出力します。

  • alphion
  • ベストアンサー率19% (27/136)
回答No.2

printf(" \n"); <==== \nは改行してしまいます。 for(j=1;j<i;i++){ <==== i++ではなくj++ 試していませんが、そんなところかと…

  • kyrsche
  • ベストアンサー率41% (7/17)
回答No.1

実行してみたところ、無限ループを起こしているようです。 ループの終了条件を確認してみてください。 期待通りの動作になるためには、上の条件の見直しを 含めて、全体で二箇所修正しました。 ループが解決したら、あとはすぐだと思います。 #なんとなく学校の課題っぽいので適当にはぐらかしてみました(^_^;;

関連するQ&A