C 为什么调用函数中的if-else不适用于do-while函数?

C 为什么调用函数中的if-else不适用于do-while函数?,c,function,C,Function,我需要创建一个函数floatcalculateClaim(vehicleClass,distanceTravel),该函数接受车辆类别和行驶距离,确定费率并返回索赔金额。主函数读取车辆类别和行驶距离,调用函数calculateClaim(),并计算总里程索赔 但是,我无法显示索赔金额。它仅显示0.00 我做的程序是这样的: #include <stdio.h> float calculateClaim(char, int); int main(void){ char Vehi

我需要创建一个函数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 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;
}
#包括
浮点计算目标(字符,整数);
内部主(空){
炭载体,选择;
int距离,num;
浮动金额,总计;
printf(“………\n”);
printf(“车辆类别”);
printf(“………\n”);
printf(“A B C D\n”);
printf(“费率(分/公里)70 60 50 45\n”);
printf(“………\n\n”);
printf(“输入车辆类别:”);
扫描频率(“%c”和车辆);
num=1;
总数=0;
做{
printf(“输入行驶距离(km):”;
扫描频率(“%d”和距离);
计算目标(车辆、距离);
printf(“索赔额%d\t\t:%.2f\n”,数字,金额);
printf(“下一次里程索赔(输入Y/N)\t:”;
scanf(“%ch”、&choice);
printf(“\n”);
num++;
合计=金额+合计;
}while(choice='Y');
printf(“\n总索赔金额\t\t:%.2f”,合计);
返回0;
}   
浮点计算瞄准(字符车辆类,整数距离旅行){
浮动金额;
浮动计算瞄准;
如果(车辆等级=='A')
金额=0.7*距离行程;
否则,如果(车辆等级=='a')
金额=0.7*距离行程;
否则,如果(车辆等级=='B')
金额=0.6*距离行程;
否则,如果(车辆等级=='b')
金额=0.6*距离行程;
否则,如果(车辆类别=='C')
金额=0.5*距离行程;
否则,如果(车辆类别=='c')
金额=0.5*距离行程;
否则,如果(车辆等级=='D')
金额=0.45*距离行程;
否则,如果(车辆等级=='d')
金额=0.45*距离行程;
返回目标;
}

您没有将Amount变量设置为保存calculateClaim函数返回的值。此外,calculateClaim函数应返回金额,而不是变量calculateClaim(该变量从未在函数中设置)

#包括
浮点计算目标(字符,整数);
内部主(空){
炭载体,选择;
int距离,num;
浮动金额,总计;
printf(“………\n”);
printf(“车辆类别”);
printf(“………\n”);
printf(“A B C D\n”);
printf(“费率(分/公里)70 60 50 45\n”);
printf(“………\n\n”);
printf(“输入车辆类别:”);
扫描频率(“%c”和车辆);
num=1;
总数=0;
做{
printf(“输入行驶距离(km):”;
扫描频率(“%d”和距离);
金额=计算的目标(车辆、距离);
printf(“索赔额%d\t\t:%.2f\n”,数字,金额);
printf(“下一次里程索赔(输入Y/N)\t:”;
scanf(“%ch”、&choice);
printf(“\n”);
num++;
合计=金额+合计;
}while(choice='Y');
printf(“\n总索赔金额\t\t:%.2f”,合计);
返回0;
}
浮点计算瞄准(字符车辆类,整数距离旅行){
浮动金额;
浮动计算瞄准;
如果(车辆等级=='A')
金额=0.7*距离行程;
否则,如果(车辆等级=='a')
金额=0.7*距离行程;
否则,如果(车辆等级=='B')
金额=0.6*距离行程;
否则,如果(车辆等级=='b')
金额=0.6*距离行程;
否则,如果(车辆类别=='C')
金额=0.5*距离行程;
否则,如果(车辆类别=='c')
金额=0.5*距离行程;
否则,如果(车辆等级=='D')
金额=0.45*距离行程;
否则,如果(车辆等级=='d')
金额=0.45*距离行程;
退货金额;
}

如前所述,您没有使用
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 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;
    }
calculatelaim()
中,您有一个冗余的
float
变量
calculatelaim
,因为您实际上只使用了
Amount
变量

calculatelaim()
函数返回
Amount
并删除冗余变量,而不是返回
float
变量
calculatelaim

使用与函数相同的名称命名变量不是一个好的做法

#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;
    }
此外,您也在重复自己,以检查中是否存在不区分大小写的比较

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;

忘记设置
金额
?我猜
Amount=计算目标(车辆、距离)。看来你需要
退货金额
而不是
返回calculatelaim