Мой код возвращает 0 для каждого вывода при расчете еженедельной оплаты

#c

#c

Вопрос:

Я присвоил значение ставки за час (bpr) как 12.My цель состояла в том, чтобы найти валовую заработную плату, налоги и чистую заработную плату с учетом количества часов, введенных пользователем.Кроме того, если количество часов превышает 40, скорость увеличивается на 1.5.So тариф за дополнительные часы составляет 18 часов в час вместо 12.Вот мой код:

 #include <stdio.h>

int main ()
{
    //program to calculate weekly pay

    int hrs = 0;
    int bpr = 12;
    double gross_pay = 0.0;
    double tax = 0.0;
    double net_pay = 0.0;

    printf("Enter the no of hours worked in a week: ");
    scanf("%d", amp;hrs);

    if (hrs <= 40)
        gross_pay =(bpr * hrs);
    else
    {
        gross_pay = (bpr * hrs);
        double overtimepay = (hrs - 40) * (bpr * 1.5);
        gross_pay  = overtimepay;
    }


    if (gross_pay <= 300)
        tax = (0.15 * gross_pay);

    else if (gross_pay > 300 amp;amp; gross_pay <= 450)
        tax = ((0.15 * 300)   0.2 * (gross_pay - 300));
    else
        tax = ((0.15 * 300)   (0.2 * 150)   0.25 * (gross_pay - 450));

    net_pay = (gross_pay - tax);

    printf("The gross pay is: %dn",gross_pay);
    printf("The total tax amount is: %dn",tax);
    printf("The net pay is: %dn",net_pay);


    return 0;

}
 

Код возвращает 0 для каждого вывода.В чем ошибка?

Комментарии:

1. Это не относится к делу, но вы неправильно рассчитываете оплату сверхурочных.

2. @FiddlingBits Извините, отредактировал сообщение, чтобы предоставить недостающую информацию

Ответ №1:

Вы вызываете неопределенное поведение, передавая данные с неправильным типом printf() .

%d предназначен для печати int , но вы проходите мимо double .

Для печати double через printf() , вам , вероятно , следует использовать %f или %g . (Есть также некоторые другие спецификаторы для печати double в разных форматах)