- ベストアンサー
初めてのC言語
半径rで円周をだすプログラムを作りたいのですが作ってみたところ答えが0.00しかでてきません。 どこが間違っているのでしょうか。 #include <stdio.h> #define PI 3.14159265358979 /* 円周率 */ int main(void) { double r,a; printf("r="); scanf("%lf",&r); a=r*2*PI; printf("r*2*PI=%5.2lf\n",a); return 0; }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
printf で double の値を表示するとき, むかしは %f を使ってた (%lf は NG) んだね. だから, 「ちょ~古い」処理系だと変なことになるかもしれん. ただ, scanf とのからみでいろいろあって, 今では %lf でも OK になってる.
その他の回答 (4)
- maiko0318
- ベストアンサー率21% (1483/6969)
>fとlfの違いってなんなのでしょうか。 l(える)は倍長整数を表します。
- kmee
- ベストアンサー率55% (1857/3366)
プログラムには問題無いはずですが。 例えば printf("r="); scanf("%lf",&r); を r=100.0 ; にしたら、正しい値になるのかどうか printf("r=%5.2lf\n",r); printf("r*2*PI=%5.2lf\n",a); としてみて、rに正しい値が入っているかどうか 等、どこで変になっているかを確認してはどうでしょうか?
補足
すぐの回答ありがとうございます! 今いろいろ試してみました。 ちゃんと計算されてる!と思ったら scanfのほうでは%lfで 最後のprintfでは%5.2f となっていてlが抜けていました。 試料にはdoubleを使うときは%lfを使えと 書いてあったんですが 見本ではlfでも計算できていました。 なぜなのでしょうか。fとlfの違いってなんなのでしょうか。
- maiko0318
- ベストアンサー率21% (1483/6969)
いや、ソースはあってます。 この、最新状態でコンパイルしていますか? ソースを上書きしてない。とか、コンパイルのファイル名が違うとか、ないですか? それと、 #include<math.h> を入れておくと、 #define M_PI 3.14159265358979323846 が入ってるので、定義せずに、M_PI で使えます。
- maiko0318
- ベストアンサー率21% (1483/6969)
intmain(void) はint main(void) return0; はreturn 0; 以上でコンパイルしたら半径100で628.32と出ましたよ。
補足
それでもrをいくつにしても0になってしまいます。 違うところに原因があるのでしょうか。 いろいろ変えたり調べてみましたがちゃんと作動してくれません。
お礼
lfをfに変えたらできるようになりました! 指定されたソフトが古かったみたいてす。 皆さんありがとうございました!!