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

No.1ベストアンサー
- 回答日時:
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で表示するときは、&をつけないと覚えてください。
No.2
- 回答日時:
printf文で&a、&b、&cとしていますが、こう書くとどういう値を参照すると理解していますか?
出力を見るとループ回数は求める通り5回となっていますからwhileループは正しく動いています。
意図したとおり動いていないのはprintf文ということがわかりますよね?
5セット出力されているa、b、cの値が全て同じというのが大きなヒントです。つまりa、b、cに格納されている値を印字していないということがわかります。
だとすると。。。
無事解決しました!
参考書によると&とは変数のアドレスを求める演算子で、&は変数を書き換えるときに使うとか。
変数を表示するだけのprintfのときは&をつけてはいけないってことですかね?
とりあえず&を外してみたら正しく動きました。
ご回答ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
???ダメなんです(分からないん...
-
配列を関数に渡す方法
-
while文の判定について(C言語)
-
初心者です。
-
for文の条件式について
-
”0”入力時、else文の中の”Can n...
-
初歩的な質問
-
Verilog HDLについて質問
-
プログラム 不等式
-
c言語の配列のプログラム
-
C言語 指南お願いします
-
四則演算のプログラム
-
for文
-
実行すると if文 に矛盾
-
while for/ if else/do while文...
-
十進BASICのプログラムについて
-
if-else文および標準演算子(*...
-
C言語のwhileループについて
-
printfでの計算結果がおかしく...
-
誤作動の原因を教えてください
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
C言語階乗の総和を求める
-
初心者です。for文、if文を使っ...
-
配列を関数に渡す方法
-
C言語 マスターマインドゲーム...
-
C言語 入力した数値の平均値の...
-
C言語の二分法のプログラムにつ...
-
配列を使って魔方陣
-
scanf関数を用いての加減乗除%...
-
10進数からN進数に変換するプロ...
-
c言語のwhile文を使った計算で...
-
全角文字の判定
-
C言語 数字以外を入力させない...
-
プログラミングで二番目に大き...
-
while文を使った問題なのですが...
-
getcの改行判定
-
C言語
-
c言語で平均をだす
おすすめ情報