0

「1.#R」を印刷する別の浮動小数点出力の問題があります。繰り返しの値に絞り込んだので、値を小数点以下 2 桁に丸める方法を教えてください。 %.2f")。これが私のコードです:

#include <stdio.h>
#include <stdlib.h>

void tax_deduction( float *total)
{
    float taxpercent = 1.20;
    float nationalInsurance = 1.175;
    *total = *total - 9000;
    *total = *total / taxpercent;
    *total = *total / nationalInsurance;
    *total = *total + 9000;

}

void hourly_rate(float *rate)
{
    int weeks = 52;
    float hours = 37.5;
    *rate = *rate /(float)weeks;
    *rate = *rate /hours;
}

int main()
{
   float wages;
   float hours = wages;
   printf("Please enter your wage: \n");
   scanf("%f",&wages);
   if(wages > 9000){
    tax_deduction(&wages);
   }
   hourly_rate(&hours);
   printf("wages after tax and NI: %.2f\n", wages);
   printf("wages per month: %.2f\n", wages / 12);
   printf("hourly rate: %.2f\n", hours);
   return 0;
}

下部にprintf("hourly rate: %.2f\n", (wages/52)/37/5);のようにコーディングすると、hourly_rate 関数を実行した後の表示方法に問題があります。それは機能しますが、それは私がコーディングしたい方法ではありません。

なぜこれが正しく機能しないのか、誰でも考えられますか?

4

3 に答える 3

4

あなたの問題はprintf. あなたの問題は、初期化されていない値を使用しているため、コードの算術演算が正しくないことです。

float wages; // wages not initialized
float hours = wages; // hours assigned that uninitialized value
printf("Please enter your wage: \n");
scanf("%f",&wages);
if(wages > 9000){
    tax_deduction(&wages);
}
hourly_rate(&hours); // hours still not initialized

の初期化に失敗していますhours

私の推測では、 をhours読み込んだ後に初期化するつもりですwages。そのため、 への代入をが適切に定義さhoursれているコード内のポイントに移動します。wages

float wages;
printf("Please enter your wage: \n");
scanf("%f",&wages);
if(wages > 9000){
    tax_deduction(&wages);
}
float hours = wages;
hourly_rate(&hours);

あなたが得ている奇妙な出力は、浮動小数点 NaN を%.2fformat で出力した結果です。if(wages > 9000)テストを 内に移動することもお勧めしますtax_deduction。あなたが現在持っているように、税額控除コードのその部分が呼び出しコードに漏れています。

于 2013-04-19T07:31:59.423 に答える
1

はい、hours = wages値を賃金に読み込む前に設定したためです。これらは参照ではなく、等しく設定された値です。

時間 = 賃金を scanf 行の後に挿入すると機能します。

さらに、コーディング スタイルの問題として、これらのような単純なケースでは、ほとんどのプログラマは、変更された値へのポインターを送信する代わりに、関数からの戻り値を使用することを好みます。これは決して普遍的なものではありませんが、おそらく良い考えです。

于 2013-04-19T07:32:20.560 に答える