Почему if else в функции вызова не работает для функции do while?

#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;