• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語、円周率の値が0.000000?)

C言語で円周率の値が0.000000になる理由は?

このQ&Aのポイント
  • C言語で円周率の値が0.000000になった理由を説明します。
  • 円周率の値が0.000000になる原因と解決策について解説します。
  • C言語で円周率の値が正しく表示されない問題について解決方法を紹介します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> scanf("%1f", &pi); ここ↑が間違い %1f じゃなくて、 %lf エル・エフです。

takakou7979
質問者

お礼

ご回答誠に有難うございます。 C言語の理屈を掴んでないから このようなミスを犯します。 ゆっくりとじっくりと、学習していきます。

その他の回答 (4)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.5

直接の内容の回答は他の回答者がされていますので別の視点からの回答をします。 >アドバイスの程宜しくお願い申し上げます。 あなたのコンパイルできないとや実行できないといった質問のほとんどの原因は、あなたのソースコードの書き間違いや手順の間違いです。 ですので質問をする前に書き間違えていないか、手順は間違えていないかをしっかり確認し直してください。

takakou7979
質問者

お礼

ご回答誠に有難うございます。

回答No.4

No.3の回答者へ printfのように、引数の型が不定な関数では、floatはdoubleに変換されてから関数の引数となります。 従って、printfでは、%f も %lf も同じ扱いですので、この質問の場合、scanfだけ直せば良いのですよ。

takakou7979
質問者

お礼

ご回答誠に有難うございます。

回答No.3

>どうしてでしょうか? 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」など、フィールド幅を指定してはいけません。

takakou7979
質問者

お礼

ご回答誠に有難うございます。 でも色々と難しいです。

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.2

scanf("%1f", &pi); を scanf("%lf", &pi); に書き直してください。

takakou7979
質問者

お礼

ご回答誠に有難うございます。