• ベストアンサー

どうすれば直りますか?

 ユーザに現在の年齢を入力してもらい、 現在の年齢 :(現在の年齢) 5年後の年齢 :(5年後の年齢) 10年後の年齢:(10年後の年齢) のように出力するプログラムを書いてください。ただし、「(現在の年齢)」などには、実際の数値が入るとします。 このようなプログラムを自分なりに作ってみたところ #include <stdio.h> int main(void) { int a; int b = a + 5; int c = a + 10; printf("現在の年齢:"); scanf("%d",&a); printf("5年後の年齢:%d\n\n",&b); printf("10年後の年齢:%d\n",&c); return 0; } このようになりました。それでコンパイルをして実行して年齢を5と入力したところ1245060と表示されました。ほかの数字でも1245060と表示されます。10年後の年齢も同じように1245056と表示されます。 どこをどのように直せば通常通りに表示されるのでしょうか? よろしくおねがいします

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

  • ベストアンサー
noname#22650
noname#22650
回答No.5

#3です >printf("5年後の年齢:%d\n\n",b); >printf("10年後の年齢:%d\n",c); >の&はいらないのでしょうか? & の意味はご存知でしょうか? & をつけるとその変数のアドレスを示します。 printf("5年後の年齢:%d\n\n",b); と書くと変数bの内容が表示されますが、 printf("5年後の年齢:%d\n\n",&b); と書くと変数bのアドレスが表示されてしまいます。 ついでに、 scanf関数は変数の内容を書き換える関数ですので、 必要なのは変数の値ではなく、変数のアドレスです。 よって通常 & をつけます。

その他の回答 (4)

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.4

>なぜ、 >printf("5年後の年齢:%d\n\n",b); >printf("10年後の年齢:%d\n",c); >の&はいらないのでしょうか? printf()で表示したいのは、変数内の数字だからそのまま渡せばいいんだけど、scanf()では箱を渡さないと入れられない。 というか、ポインタと実体をwebででも検索した方がいいかな?

noname#22650
noname#22650
回答No.3

printf("5年後の年齢:%d\n\n",&b); printf("10年後の年齢:%d\n",&c); ここの & は要りません。 #1さんが指摘された部分も訂正して下記のようになると思います。 int main(void) { int a, b, c; printf("現在の年齢:"); scanf("%d",&a); b = a + 5; c = a + 10; printf("5年後の年齢:%d\n\n",b); printf("10年後の年齢:%d\n",c); return 0; }

dfksh
質問者

お礼

回答ありがとうございました おかげさまでできました。とてもすっきりしました。 もし良かったらまた質問に答えてくれませんでしょうか? なぜ、 printf("5年後の年齢:%d\n\n",b); printf("10年後の年齢:%d\n",c); の&はいらないのでしょうか? よろしくおねがいします。

  • kaZho_em
  • ベストアンサー率50% (2950/5879)
回答No.2

b と c に計算値を代入した後で scanfで a を取得しているからです。 御呈示のソースですと、a は初期値が不定になっています。 a を取得してから b と c の計算をして下さい。

dfksh
質問者

お礼

回答ありがとうございます つまり、scanfの後に int・・・と入れればいいのでしょうか?

回答No.1

最初に定義した int a にはコンピュータが勝手に割り当てた「不定な値」が入っています。 ですので、 b や c に加算をするのはscanfを実行して正常な値を取得してからでなければいけません。 scanf("%d",&a); b = a + 5; c = a + 10;

dfksh
質問者

お礼

回答ありがとうございました これはどこに入れればいいのでしょうか?

関連するQ&A