こんばんは。
以下のプログラムで値がおかしくなる理由、改善方法を教えて頂けませんでしょうか。
double a,b,c;
scanf("%f",&a);
scanf("%f",&b);
c = a + b;
printf("%f",c);
これを実行すると、正しい値が出力されません。
int型で宣言し、整数表示の%dに変更すると問題なく値が出力されます。
また、予めdouble型で宣言した変数a,bに実数の初期値(8.5等)を格納しておくと正しい値が出力されます。
どなたかご回答よろしくお願い致します。
No.2
- 回答日時:
%f は float型(単精度浮動小数点型)を扱うフォーマット指定子なので、 %lf と長さ修飾子 l(エル) を付加して倍精度浮動小数点型(=double)であることを示さなければいけません。
小数点数型はビットを 符号部・仮数部・基数部 に分けて考えます。float型とdouble型では仮数部と基数部のビット数が違うので、double型をfloat型として扱うと変な結果になるのです。が、C言語では可変長引数で渡される値は暗黙的に精度の高い方に変換されるんです(floatならdoubleに)。なので、可変個引数でfloatが渡されようがdoubleが渡されようがかわらないので、printfでは%fでも%lfでも同じように扱われ、printfでは%fとしていしてもOKなわけです。scanfでは普通に%fだと&a,&bはfloat型へのポインタとして扱われるので、%lfを指定しないとなりません。というわけで、double a,b,c;
scanf("%lf",&a);
scanf("%lf",&b);
c = a + b;
printf("%f",c); //printf("%lf",c); でも結果は同じ
とすれば正しく表示されると思います。
長さ修飾子について
http://ja.wikipedia.org/wiki/Printf#.E9.95.B7.E3 …
printfとscanfの違い (可変個引数の扱われ方) について
http://www.ei.fukui-nct.ac.jp/~t-saitoh/edu/Prog …
浮動小数点数型について
http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95% …
お探しの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# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- Ruby プログラミング 3 2023/06/09 14:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数におけるif文とreturn文に...
-
c言語で、繰り返し文の中で、0....
-
C言語を実行すると-infが出てき...
-
2分法で方程式の複数の解を自...
-
C言語の型による処理速度の違い
-
微分方程式(ルンゲ=クッタ)...
-
DWORDの警告
-
c言語のコンパイルエラー canno...
-
指数形式で入力するには
-
プログラムでの数字につく”f”の...
-
極座標から直交座標に変換
-
C言語のマクローリン展開ローラ...
-
ルンゲクッタ法(RK4)で斜方投...
-
台形公式・シンプソン公式につ...
-
方程式を2分法を用いて解くプロ...
-
C言語 関数プロトタイプ宣言の...
-
c++について質問です
-
プログラミングについて
-
プログラミングでのテイラー展開
-
qsortと動的確保の2次元配列
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
至急です! マクロ定義で #defi...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
C言語初心者 構造体 課題について
-
C言語の型による処理速度の違い
-
Cで3乗根を求める方法
-
C言語で-23乗を取り扱うには
-
2分法で方程式の複数の解を自...
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
C言語で直角三角形の斜辺を求め...
-
C言語のプログラムで#include<m...
-
int とdoubleの比較
-
C++で外積
おすすめ情報