C 为什么调用函数中的if-else不适用于do-while函数?
我需要创建一个函数floatC 为什么调用函数中的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
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代码>。