#c #function
#c #функция
Вопрос:
Мне нужно сделать функцию float calculateClaim(vehicleClass, distanceTravel)
, которая принимает класс транспортного средства и пройденное расстояние, определяет скорость и возвращает сумму претензии. Основная функция считывает класс транспортного средства и пройденное расстояние, вызывает функцию calculateClaim()
и вычисляет общее требование о пробеге.
Однако я не могу отобразить сумму претензии. Он только отображается 0.00
.
Программа, которую я сделал, выглядит так :
#include <stdio.h>
float calculateClaim(char, int);
int main(void){
char Vehicle, choice;
int Distance, num;
float Amount, Total;
printf("...............................................................n");
printf(" Class of Vehiclen");
printf("...............................................................n");
printf(" A B C Dn");
printf("Rate (cent/km) 70 60 50 45n");
printf("...............................................................nn");
printf("Enter Class of Vehicle : ");
scanf("%c", amp;Vehicle);
num = 1;
Total = 0;
do{
printf("Enter Distance Travelled (km) : ");
scanf("%d", amp;Distance);
calculateClaim(Vehicle, Distance);
printf("Amount of Claim %d tt: %.2f n", num, Amount);
printf("Next Mileage Claim (enter Y/N)t: ");
scanf(" %ch", amp;choice);
printf("n");
num ;
Total = Amount Total;
}while(choice == 'Y');
printf("nTotal Claim Amount tt: %.2f", Total);
return 0;
}
float calculateClaim(char vehicleClass, int distanceTravel){
float Amount;
float calculateClaim;
if(vehicleClass=='A')
Amount = 0.7 * distanceTravel;
else if(vehicleClass=='a')
Amount = 0.7 * distanceTravel;
else if(vehicleClass=='B')
Amount = 0.6 * distanceTravel;
else if(vehicleClass=='b')
Amount = 0.6 * distanceTravel;
else if(vehicleClass=='C')
Amount = 0.5 * distanceTravel;
else if(vehicleClass=='c')
Amount = 0.5 * distanceTravel;
else if(vehicleClass=='D')
Amount = 0.45 * distanceTravel;
else if(vehicleClass=='d')
Amount = 0.45 * distanceTravel;
return calculateClaim;
}
Комментарии:
1. Забыли установить
Amount
? Я думаюAmount = calculateClaim(Vehicle, Distance);
. И, похоже, вам нужноreturn Amount;
вместоreturn calculateClaim;
.
Ответ №1:
Вы не установили переменную Amount для хранения значения, возвращаемого функцией calculateClaim . Также ваша функция calculateClaim должна возвращать сумму, а не переменную calculateClaim (которая никогда не устанавливается внутри вашей функции).
#include <stdio.h>
float calculateClaim(char, int);
int main(void){
char Vehicle, choice;
int Distance, num;
float Amount, Total;
printf("...............................................................n");
printf(" Class of Vehiclen");
printf("...............................................................n");
printf(" A B C Dn");
printf("Rate (cent/km) 70 60 50 45n");
printf("...............................................................nn");
printf("Enter Class of Vehicle : ");
scanf("%c", amp;Vehicle);
num = 1;
Total = 0;
do{
printf("Enter Distance Travelled (km) : ");
scanf("%d", amp;Distance);
Amount = calculateClaim(Vehicle, Distance);
printf("Amount of Claim %d tt: %.2f n", num, Amount);
printf("Next Mileage Claim (enter Y/N)t: ");
scanf(" %ch", amp;choice);
printf("n");
num ;
Total = Amount Total;
} while(choice == 'Y');
printf("nTotal Claim Amount tt: %.2f", Total);
return 0;
}
float calculateClaim(char vehicleClass, int distanceTravel){
float Amount;
float calculateClaim;
if(vehicleClass=='A')
Amount = 0.7 * distanceTravel;
else if(vehicleClass=='a')
Amount = 0.7 * distanceTravel;
else if(vehicleClass=='B')
Amount = 0.6 * distanceTravel;
else if(vehicleClass=='b')
Amount = 0.6 * distanceTravel;
else if(vehicleClass=='C')
Amount = 0.5 * distanceTravel;
else if(vehicleClass=='c')
Amount = 0.5 * distanceTravel;
else if(vehicleClass=='D')
Amount = 0.45 * distanceTravel;
else if(vehicleClass=='d')
Amount = 0.45 * distanceTravel;
return Amount;
}
Ответ №2:
Как уже указывалось, вы не используете значение, возвращаемое calculateClaim()
функцией.
В calculateClaim()
, у вас есть избыточная float
переменная calculateClaim
, поскольку вы фактически используете только Amount
переменную.
Вместо возврата float
переменной calculateClaim
из calculateClaim()
функции верните Amount
и удалите использование избыточной переменной.
И не рекомендуется называть переменную с тем же именем, что и функция.
Кроме того, вы повторяетесь, чтобы проверить сравнение без учета регистра в
if(vehicleClass=='A')
Amount = 0.7 * distanceTravel;
else if(vehicleClass=='a')
Amount = 0.7 * distanceTravel;
Вместо этого используйте логический оператор OR ( ||
) и попробуйте что-то вроде
if(vehicleClass=='A' || vehicleClass=='a' )
Amount = 0.7 * distanceTravel;