• ベストアンサー

Cプログラムの質問

スペースを9個あけ、その次に*を表示させ、改行するというプログラムを作ろうとしています。一応プログラムを作ってみたんですが、いきませんでした。 #include <stdio.h> int main(){ int y, n; y = 10; while(n < y){ putchar(' '); } putchar('*'); putchar('\n'); return 0; } 初心者なので、どこが間違っているのかわかりません。教えてください。

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

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.4

初期化されずに参照されている変数があります。 変数は参照される前に初期化されている必要があります。 変数の宣言時に初期化して置くように心がけましょう。 > int y, n; の行で、y,nが宣言されているがが、 > while(n < y){ を通った時点で、nは未初期化。 後は、変数のトレースをがんばれば、どこがおかしいのか見えてくると思います。 机上トレースでも、プログラム上のトレースでも良いと思われますが、 色々試してみてください。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • S117
  • ベストアンサー率40% (18/45)
回答No.3

>初心者なので、どこが間違っているのかわかりません。教えてください。 プログラミングを学び始めたばかりの場合、バグに遭遇したのなら、とにかく変数のトレースをしましょう。トレースとは、変数がどう変化するのか確かめることです。今回のような場合はどう変化するのか紙に書いて確かめてください。(いいですか、このソースコードを印刷し、そのとき変数がどのような値なのか紙に書いてください。) もしかして、変数がどう変化するか良く分かってないってことはありませんか? それなら入門書をよく読んでください。何か勘違いしているのです。 プログラムは難しいと思っていませんか? すべてのプログラマは生まれついてプログラマなのではありません。みな初心者だったのです。ですから、初心者だから理解できないということはありません。がんばってください。

すると、全ての回答が全文表示されます。
noname#77845
noname#77845
回答No.2

#1さんの他に、nの値を0に設定したとして while(n < y){ putchar(' '); } ではnもyも値を変更していません。 なので、いつまでたってもn<yはtrueを返すので永久ループに入ります。 9個出力するにはどうすればいいか判りますか?

すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

> while(n < y){ 大小を比較するということは、この前に、nとyの値が 定まっていなければなりません。わかりますか? 今のコードでは、yは定まっていますが、nが定まっていませんね。

すると、全ての回答が全文表示されます。

関連するQ&A