C语言报expected expression before 'float'错误,函数调用语法如何修正
C语言代码报错问题修复
直接报错原因
你第39行的函数调用不符合C语法规则:调用已定义完成的函数时,无需重复声明参数的类型,也不需要加数组标记[]。你当前写的calculatecharges(float hours[]);是函数声明的语法,不是调用语法,才会触发expected expression before 'float'的报错。
正确调用写法为:calculatecharges(hours);
额外需要修复的逻辑漏洞
你代码中还有隐藏的逻辑错误,即使修复调用语法后运行结果也会不符合预期:
- 条件判断不能连写比较符:C语言中
3>=hours[i]>0这类连续比较写法会从左到右依次计算,先得出3>=hours[i]的布尔值(0或1),再用这个值和0比较,最终结果永远为真,完全不符合判断需求。需要用逻辑与&&拆分判断:
原if (3>=hours[i]>0)改为if (hours[i] > 0 && hours[i] <= 3)
原else if(3<hours[i]<=23)改为else if(hours[i] >3 && hours[i] <=23) - main函数中定义的
float charge[3]全程未被使用,可以直接删除避免冗余 - 建议补充异常输入判断:如果用户输入的停车时长小于0或大于24,可增加报错提示避免异常计算结果
修正后完整代码
#include <stdio.h> void calculatecharges(float hours[]){ float charge[3]; float hourst=0.0; float charget=0.0; int count=1; for(int i=0;i<=2;i++){ if (hours[i] > 0 && hours[i] <=3){ charge[i]=2; }else if(hours[i] >3 && hours[i] <=23){ charge[i]=(2+((hours[i]-3)*0.5)); }else if(hours[i]==24.0){ charge[i]=10; } // 可自行补充异常输入的处理逻辑 } for(int j=2;j>=0;j--){ hourst=hourst+hours[j]; charget=charget+charge[j]; } printf("Car Hours Charge\n"); for(int looper=0;looper<=2;looper++){ printf("%d %.2f %.2f\n",count,hours[looper],charge[looper]); count+=1; } printf("Total %.2f %.2f",hourst,charget); } int main(){ float hours[3]; printf("Enter the number of hours the 3 cars stayed(seperate numbers with a comma): "); scanf("%f,%f,%f",&hours[0],&hours[1],&hours[2]); calculatecharges(hours); return 0; }
内容的提问来源于stack exchange,提问作者New C learner
相关产品推荐
相关产品推荐

