重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

最近C言語の勉強を始めたのですが、現在whileループについてどうしてもわからない事があります。

問題
変数a,bにキーボードから整数を入力し、a×b=cを計算する。
while文の繰り返し条件をb>0とし、ループを繰り返すごとに変数bから1ずつ引いていく。
条件が達成されるまで計算するごとに変数a,b,cの値を求めよ。

という問題のプログラムを書いたのですが、答えが下のようになるはずなのになぜか7ケタになってしまいます。

※aを4、bを5としたときの答え
a=4、b=5,c=20
a=4、b=4,c=16
a=4、b=3,c=12
a=4、b=2,c=8
a=4、b=1,c=4

下は自分の書いたプログラムと結果です。

プログラム
#include <stdio.h>
int main(void)
{
int a, b, c;
scanf("%d", &a);
scanf("%d", &b);
while (b > 0){
c = a * b;
printf("a = %d\n", &a);
printf("b = %d\n", &b);
printf("c = %d\n", &c);
b= b - 1;
}
return 0;
}

結果(aには4、bには5を入力しました。)
4
5
a = 1703764
b = 1703760
c = 1703756
a = 1703764
b = 1703760
c = 1703756
a = 1703764
b = 1703760
c = 1703756
a = 1703764
b = 1703760
c = 1703756
a = 1703764
b = 1703760
c = 1703756

上のようになってしまいます。
自分でもかなり考えたのですが、何が間違っているのかさっぱりです。
初歩的なことで申し訳ないのですが、答えて頂けると嬉しいです。
よろしくお願いします。

A 回答 (2件)

printf("a = %d\n", &a);


printf("b = %d\n", &b);
printf("c = %d\n", &c);
を以下のようにしてください。(&をとる)
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("c = %d\n", c);

何故、そうするのが正しいのかというのは、ポインターに関する
説明まで遡りますので、ここでは省略します。
とりあえずは、printfで表示するときは、&をつけないと覚えてください。
    • good
    • 1
この回答へのお礼

無事解決しました!
printfを使うときは&はつけないんですね。
よく覚えておきます。
ご回答ありがとうございます。

お礼日時:2015/12/01 21:32

printf文で&a、&b、&cとしていますが、こう書くとどういう値を参照すると理解していますか?


出力を見るとループ回数は求める通り5回となっていますからwhileループは正しく動いています。
意図したとおり動いていないのはprintf文ということがわかりますよね?
5セット出力されているa、b、cの値が全て同じというのが大きなヒントです。つまりa、b、cに格納されている値を印字していないということがわかります。
だとすると。。。
    • good
    • 1
この回答へのお礼

無事解決しました!
参考書によると&とは変数のアドレスを求める演算子で、&は変数を書き換えるときに使うとか。
変数を表示するだけのprintfのときは&をつけてはいけないってことですかね?
とりあえず&を外してみたら正しく動きました。
ご回答ありがとうございます。

お礼日時:2015/12/01 21:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!