You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:45:01