2012-01-24 4 views
4

私はCプログラミングを学び始めました。 は私の本では、コードのこの作品があります:Cプログラムで0.000000が表示されるのはなぜですか?

/*Code Start*/ 
/*This code is use to find the simple interest*/ 

main() 
{ 
int p, n; 
float r, si; 

p = 1000; 
n = 3; 
r = 8.5; 

si= p*n*r/100; 
printf("%f", si); 

} 

/*Code end*/ 

ので、私はこれを書いた私は、scanf関数でそれを修正しますけれども、私が得た出力はI "255.000000"

た:

/*Code Start*/ 

main() 
{ 
int p, n; 
float r, si; 

printf("Enter value for p: \n"); 
scanf("%d", &p); 
printf("Enter value for n: \n\n"); 
scanf("%d", &n); 
printf("Enter valuse for r: \n\n"); 
scanf("%d", &r); 

si= p*n*r/100; 

printf("\nYour Simple Interest is %f\n\n", si); 
} 

/*Code End*/ 

私がp、n、rに与える値が何であっても、私が得られる答えは常に0.000000です。
p = 1000、n = 3、r = 8.5の値を与えようとしましたが、まだ0.000000 ..

+2

「int」の場合は「%d」、「float」の場合は「%f」、「double」の場合は「%e」、文字列の場合は「%c」、文字列の場合は「%s」を覚えておいてください。 –

+4

'gcc -Wall'でコンパイルします。警告を有効にすることで、このコードの4つの問題点を特定することができます。適用する必要のある修正は、警告メッセージから明らかです。 –

+1

あなたの本はプロトタイプなしで 'main'を持っています、つまり戻り値を指定せず、空のパラメータリストを持っていますか?これはかなり古いです。 –

答えて

4

、あなたの主な問題:%d指定子は整数のみ、ないfloat秒またはdouble秒間です。 floatsには%fを使用してください。また

mainintを返す必要があり、これが行います:あなたは大きな作り始めると、それは非常に読みやすくする助けになるだろうと

int main() { 
    /* your code */ 
    return 0; 
} 

を最後に、私はあなたがホワイトスペースをよりよく利用する推薦しますプログラム。

+0

ありがとうございます。出来た。 mainがintを返さなければならないということを何か説明できますか?このmain()はどういう意味ですか?それ以前にintを追加する理由は何ですか?私たちは括弧で何を入れることができますか? – 912M0FR34K

+0

@ 912M0FR34K: 'main'関数は、実行環境によって呼び出されるプログラムのエントリポイントです。言語仕様では、 'int'値を返すために' main'が必要です。 'main'の2つの標準的な署名は' int main(void) 'と' int main(int argc、char ** argv) 'です。あなたの本で 'main()'が見つかるたびに、 'int main(void)'に置き換えてください。あなたは何を使っていますか? –

+0

@JhonBode:もう一度ありがとうございます。私は "ANSI-E Balagurusamyのプログラミング"を使用しています。あなたはそれが良くないと思うなら、どの本をお勧めしますか?私はプログラミングの初心者です – 912M0FR34K

6

指定子をscanfに変更してください。あなたは代わりに%f%dを使用している:

scanf("%f", &r); 
     ^
  • まずサイドノート:コードが悪いの一種になります(mainのためノーリターンタイプを?!)。それは良い本だと確信していますか?
  • 第2のメモ:floatを使用して今日は無意味です。たぶんあなたは double秒を使用する必要がありますか? floatを読み取る
+0

'float'がまだ理にかなっているフィールドがいくつかあります。たとえば、グラフィックスやゲームでは、' double'精度が必要ではないのに 'float'が高速です。 – ouah

+0

@ouahはい、私はそれがかなり賢明だと思います。それでも、私は浮動小数点が過度に使用されていると感じます。 – cnicutar

+0

ありがとうございます。出来た。 mainがintを返さなければならないということを何か説明できますか?このmain()はどういう意味ですか?それ以前にintを追加する理由は何ですか?私たちは括弧で何を入れることができますか? 私はCを学ぶためにどのような本をお勧めしますか?私は初心者で、これは私の最初の言語です。 – 912M0FR34K

4

使用%f変換仕様:

scanf("%f", &r); 

%dは、10進数の整数としないfloatを読み出します。

4

rfloatですが、intを期待scanf指定子として%dを使用して、それを読んでいます。まず

0

コード内の実際の原因は、scanf("**%d**", &r)という行です。 %dは整数値の書式指定子です。rをfloatとして宣言した場合、%dではなく%fを使用してください。

すなわちscanf("%f", &r)

+0

正解ですが、他の4つの回答が3年後に言ったことをなぜ再ハッシュしますか? – namezero

0

変更あり int p、n; float r、si; ~ int p、n、r; float si;

scanf( "%d"、&r); %d~%f

rを整数として宣言した場合r = 8この場合、scanf( "%d"、& r);受理されます。プログラムがコンパイルされて実行されます。

宣言と書式指定子の両方が同じである必要があります。

私の提案は、お金を扱うとき%.2fを使用することです。それは10.00のようなものを与え、正しいformateです。

関連する問題