- ベストアンサー
C言語で円周率の値が0.000000になる理由は?
- C言語で円周率の値が0.000000になった理由を説明します。
- 円周率の値が0.000000になる原因と解決策について解説します。
- C言語で円周率の値が正しく表示されない問題について解決方法を紹介します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> scanf("%1f", &pi); ここ↑が間違い %1f じゃなくて、 %lf エル・エフです。
その他の回答 (4)
- wormhole
- ベストアンサー率28% (1626/5665)
直接の内容の回答は他の回答者がされていますので別の視点からの回答をします。 >アドバイスの程宜しくお願い申し上げます。 あなたのコンパイルできないとや実行できないといった質問のほとんどの原因は、あなたのソースコードの書き間違いや手順の間違いです。 ですので質問をする前に書き間違えていないか、手順は間違えていないかをしっかり確認し直してください。
お礼
ご回答誠に有難うございます。
- kawais070_1
- ベストアンサー率55% (515/931)
No.3の回答者へ printfのように、引数の型が不定な関数では、floatはdoubleに変換されてから関数の引数となります。 従って、printfでは、%f も %lf も同じ扱いですので、この質問の場合、scanfだけ直せば良いのですよ。
お礼
ご回答誠に有難うございます。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>どうしてでしょうか? piが倍精度の変数なのに、scanf、printfに単精度を指定しているから。 //単精度バージョン #include <stdio.h> int main(void) { float pi; printf("円周率の値はいくつですか?\n"); scanf("%f", &pi); printf("円周率の値は%fです。\n", pi); return 0; } //倍精度バージョン #include <stdio.h> int main(void) { double pi; printf("円周率の値はいくつですか?\n"); scanf("%lf", &pi); printf("円周率の値は%lfです。\n", pi); return 0; } それと、scanfに「%1f」と指定すると「1桁しか読み込まない」ので「3.14」と入力しても「3」しか入力しません。 なので「何桁入力するか判らない場合」には「%f」や「%lf」など、フィールド幅を指定してはいけません。
お礼
ご回答誠に有難うございます。 でも色々と難しいです。
- f272
- ベストアンサー率46% (8467/18126)
scanf("%1f", &pi); を scanf("%lf", &pi); に書き直してください。
お礼
ご回答誠に有難うございます。
お礼
ご回答誠に有難うございます。 C言語の理屈を掴んでないから このようなミスを犯します。 ゆっくりとじっくりと、学習していきます。