- ベストアンサー
どうすれば直りますか?
ユーザに現在の年齢を入力してもらい、 現在の年齢 :(現在の年齢) 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と表示されます。 どこをどのように直せば通常通りに表示されるのでしょうか? よろしくおねがいします
- みんなの回答 (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)
>なぜ、 >printf("5年後の年齢:%d\n\n",b); >printf("10年後の年齢:%d\n",c); >の&はいらないのでしょうか? printf()で表示したいのは、変数内の数字だからそのまま渡せばいいんだけど、scanf()では箱を渡さないと入れられない。 というか、ポインタと実体をwebででも検索した方がいいかな?
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; }
- kaZho_em
- ベストアンサー率50% (2950/5879)
b と c に計算値を代入した後で scanfで a を取得しているからです。 御呈示のソースですと、a は初期値が不定になっています。 a を取得してから b と c の計算をして下さい。
お礼
回答ありがとうございます つまり、scanfの後に int・・・と入れればいいのでしょうか?
- Wakkey-san
- ベストアンサー率44% (85/191)
最初に定義した int a にはコンピュータが勝手に割り当てた「不定な値」が入っています。 ですので、 b や c に加算をするのはscanfを実行して正常な値を取得してからでなければいけません。 scanf("%d",&a); b = a + 5; c = a + 10;
お礼
回答ありがとうございました これはどこに入れればいいのでしょうか?
お礼
回答ありがとうございました おかげさまでできました。とてもすっきりしました。 もし良かったらまた質問に答えてくれませんでしょうか? なぜ、 printf("5年後の年齢:%d\n\n",b); printf("10年後の年齢:%d\n",c); の&はいらないのでしょうか? よろしくおねがいします。