2017-03-26 2 views
0

私は週給を計算するプログラムを作成しています。その場合、残業手当はその週の通常の支払率の1.5倍です。 私のコードは次のとおりです。プログラムは動作しないし続け、私はその理由を理解していないが毎週の賃金と残業手当が機能しないと計算するCプログラム?デバッグ

#include <stdio.h> 

int main() 
{ 

    double payrate; 
    double hours; 
    double weeklypay = hours * payrate; 
    double overtimehours = hours - 40; 
    double overtimepay = weeklypay * 1.5; 
    double overtimesalary = weeklypay + (overtimehours * overtimepay); 

    printf("What is your standard hourly pay rate?\n"); 
    scanf("%d",&payrate); 
    printf("How many hours do you work in a week?\n"); 
    scanf("%d",&hours); 

    if (hours <= 40) 
    printf("This means your weekly pay is %d . \n", weeklypay); 

    else 
    printf("This means your weekly pay is %d . \n", overtimesalary); 

    return 0; 
} 

?私に答えを与えるのではなく、私はいつも毎週の給料を「1」と答えます。または、小数点で答えを出すと、答えは0になります。このように:

What is your standard hourly pay rate? 
2 
How many hours do you work in a week? 
2 
This means your weekly pay is 1 . 

私は何をしていますか?私はCの初心者ですので、私の無知のために私を許していますが、私は一日中、理由を把握しようとしたように、実際にいくつかの助けをすることができます。

+0

まずpayrateと時間がいくつかの未知の数字が含まれている参照してください。次に、\ *未払いの番号(*未知の他の番号)を計算し、それを(*も不明です)週ごとの支払いで保存します。次に、ユーザーに時間と支払いを求めるようないくつかの作業を行います。それで、あなたは週刊払いで以前に保管した番号を印刷しますが、変更されていないので変更されません。 – immibis

答えて

0

、あなたはintのアドレスを期待%d書式指定子を、使用しているが、あなたはdoubleのアドレスを渡しています。間違った書式指定子を使用すると、定義されていない動作が呼び出されます。

doubleの場合は、%lfフォーマット指定子を使用してください。

scanf("%lf",&payrate); 
.... 
scanf("%lf",&hours); 

また、あなたがそれらに任意の値を読み値前上で動作しています。最初に値を読み取る必要があります。次にを計算します。

0

誤った順序で文があります。計算を移動する必要があります:入力を行うコードの後に​​計算を移動する必要があります。

double weeklypay = hours * payrate; 
double overtimehours = hours - 40; 
double overtimepay = weeklypay * 1.5; 
double overtimesalary = weeklypay + (overtimehours * overtimepay); 

それ以外の場合は、意味のある数字で操作していません。

また、お客様のscanfprintfのフォーマットは、お客様の可変タイプと一致しません。 をscanfとの変数にdoubleの変数に使用してください。

最後に、をオンにして、コンパイラの警告であるに注意してください。これはすべて合理的に最近の(読んだ:過去20年)コンパイラによって明確に報告されています。 scanfを使用している場合

0

は、私のコメント

#include <stdio.h> 

int main() 
{ 

    double payrate; 
    double hours; 
    double weeklypay = hours * payrate; // Here payrate does not have a value nor does hours 
    double overtimehours = hours - 40; // Ditto with hours 
    double overtimepay = weeklypay * 1.5; // From above this is not defined 
    double overtimesalary = weeklypay + (overtimehours * overtimepay); // ... 

    printf("What is your standard hourly pay rate?\n"); 
    scanf("%d",&payrate); // Check the return value from scanf 
    printf("How many hours do you work in a week?\n"); 
    scanf("%d",&hours); // See above 

// Here you are on your own... 
    if (hours <= 40) 
    printf("This means your weekly pay is %d . \n", weeklypay); 

    else 
    printf("This means your weekly pay is %d . \n", overtimesalary); 

    return 0; 
} 
関連する問題