Почему if if в функции вызова не работает для функции do while? - PullRequest
0 голосов
/ 11 апреля 2019

Мне нужно сделать функцию с плавающей запятой 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 Vehicle\n");
    printf("...............................................................\n");
    printf("            A   B   C   D\n");
    printf("Rate (cent/km)      70  60  50  45\n");
    printf("...............................................................\n\n");

    printf("Enter Class of Vehicle      : ");
    scanf("%c", &Vehicle);
    num = 1;
    Total = 0;

    do{ 
        printf("Enter Distance Travelled (km)   : ");
        scanf("%d", &Distance);
        calculateClaim(Vehicle, Distance);
        printf("Amount of Claim %d \t\t: %.2f \n", num, Amount);
        printf("Next Mileage Claim (enter Y/N)\t: ");
        scanf(" %ch", &choice);
        printf("\n");
        num++;  
        Total = Amount + Total;
    }while(choice == 'Y');

    printf("\nTotal Claim Amount \t\t: %.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;
}

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Как уже указывалось, вы не используете значение, возвращаемое функцией calculateClaim().

В calculateClaim() у вас есть избыточная float переменная calculateClaim, поскольку вы фактически используететолько переменная Amount.

Вместо возврата float переменной calculateClaim из функции calculateClaim() верните Amount и исключите использование избыточной переменной.

И не рекомендуется называть переменную с тем же именем, что и у функции.

Кроме того, вы повторяете себя, чтобы проверять сравнение без учета регистра в

if(vehicleClass=='A')
    Amount = 0.7 * distanceTravel;
else if(vehicleClass=='a')
    Amount = 0.7 * distanceTravel;

Вместо этого, используйте логический оператор ИЛИ (||) и попробуйте что-то вроде

if(vehicleClass=='A' || vehicleClass=='a' )
    Amount = 0.7 * distanceTravel;
0 голосов
/ 11 апреля 2019

Вы не установили переменную Amount для хранения значения, возвращаемого функцией calcClaim. Также ваша функция calcClaim должна возвращать значение Amount, а не переменную calcClaim (которая никогда не устанавливается внутри вашей функции).

#include <stdio.h>
float calculateClaim(char, int);
int main(void){
    char Vehicle, choice;
    int Distance, num;
    float Amount, Total;


    printf("...............................................................\n");
    printf("                 Class of Vehicle\n");
    printf("...............................................................\n");
    printf("            A   B   C   D\n");
    printf("Rate (cent/km)      70  60  50  45\n");
    printf("...............................................................\n\n");

    printf("Enter Class of Vehicle      : ");
    scanf("%c", &Vehicle);
    num = 1;
    Total = 0;

    do{

        printf("Enter Distance Travelled (km)   : ");
        scanf("%d", &Distance);
        Amount = calculateClaim(Vehicle, Distance);
        printf("Amount of Claim %d \t\t: %.2f \n", num, Amount);
        printf("Next Mileage Claim (enter Y/N)\t: ");
        scanf(" %ch", &choice);
        printf("\n");
        num++;
        Total = Amount + Total;

    }   while(choice == 'Y');

        printf("\nTotal Claim Amount \t\t: %.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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...