case 2:
if (hrswrk <= 40)
pay = wage * hrswrk;
else
pay = (40 * wage) + (hrswrk - 40) * (wage * 1.5);
printf("Hourly Workers is selected. \n");
printf("Enter number of hours worked: \n");
scanf("%i",&hrswrk);
printf("Enter hourly wage: \n");
scanf("%i",&wage);
printf("Your pay is Php%.2f",pay);
break;
Это всего лишь часть моей программы, и меня расстраивает то, что я даже не могу ее решить. Может быть, ошибка в том, что я поместил оператор if else в переключатель? Я так заблудился.
Скорее всего, вы смешиваете целые числа и числа с плавающей запятой. На это невозможно ответить без объявления переменных.
Вам необходимо вычислить pay
после, значения для hrswrk
и wage
были установлены, то есть переместить блок if
после в последний вызов scanf
.
Хотя некоторые языки работают так, как вы написали, C - нет.
Также обратите внимание, что вы всегда должны проверять возвращаемое значение scanf
, чтобы проверить, было ли чтение успешным.
любопытно узнать, какие языки работают таким образом.
@GauravSehgal: Вы можете заставить C++ делать это с помощью актеры. См. Пример использования Boost Phoenix.
Запустите свой if-condition
после scanf()
В вашем коде вы выполняете if-condition
перед чтением hrswrk
и wage
. Сначала прочтите их и запустите if-logic
.
Попробуйте этот модифицированный код: -
case 2:
printf("Hourly Workers is selected. \n");
printf("Enter number of hours worked: \n");
scanf("%i", &hrswrk);
printf("Enter hourly wage: \n");
scanf("%i", &wage);
if (hrswrk <= 40) // if condition after scanning wage and hrswrk
pay = wage * hrswrk;
else
pay = (40 * wage) + (hrswrk - 40) * (wage * 1.5);
printf("Your pay is Php%.2f", pay);
break;
Это сработает.
if
- это не шлейф.
case 2:
printf("Hourly Workers is selected. \n");
printf("Enter number of hours worked: \n");
scanf("%i",&hrswrk);
printf("Enter hourly wage: \n");
scanf("%i",&wage);
if (hrswrk <= 40)
pay = wage * hrswrk;
else
pay = (40 * wage) + (hrswrk - 40) * (wage * 1.5);
printf("Your pay is Php%.2f",pay);
break;
Выполняйте свои операции после того, как получите необходимые данные:
case 2:
printf("Hourly Workers is selected. \n");
printf("Enter number of hours worked: \n");
scanf("%i",&hrswrk);
printf("Enter hourly wage: \n");
scanf("%i",&wage);
if (hrswrk <= 40)
pay = wage * hrswrk;
else
pay = (40 * wage) + (hrswrk - 40) * (wage * 1.5);
printf("Your pay is Php%.2f",pay);
break;
Это не полный пример, и вы не объясняете, что «приводит к 0». Во-первых, вы не проверяете возвращаемые значения любой из
scanf()
, поэтому вы не знаете, работали ли они вообще.