C语言cannot be used as a function报错原因及函数传值方案
报错原因
触发cannot be used as a function编译错误的核心原因是C语言语法不支持省略乘法运算符:
你写的计算表达式bb1(1+((5.3/100)*0.25))中,变量bb1后直接跟了圆括号,编译器会按照语法规则把这种形式识别为「调用名为bb1的函数,括号内内容是传入的参数」。但bb1是你定义的float类型数值变量,并非函数指针或函数名,因此直接抛出该错误。
除此之外你的代码还有两个问题会导致功能不符合预期:
- 跨函数值传递链路断裂:
getBalance读取到的bb是函数内部局部变量,无法被其他函数直接访问,且main函数拿到getBalance返回的余额值后,没有调用quarterOne函数传值,季度余额计算逻辑根本不会执行 quarterOne函数声明了返回值类型为float,但原函数体没有写return语句返回计算结果,会触发编译警告
修复方案
- 修正计算表达式:补全省略的乘法运算符
*,将错误行修改为Q1 = bb1 * (1+((5.3/100)*0.25));,明确告知编译器这是两个数值做乘法运算,而非函数调用 - 打通值传递链路:
getBalance通过return将读取到的bb值返回给main函数的变量存储,在main中调用quarterOne时把这个余额值作为实参传入,quarterOne的形参就能接收到正确的初始余额 - 补全函数返回值:在
quarterOne函数末尾通过return返回计算得到的季度余额,匹配函数声明的返回值类型,消除编译警告
修复后完整可运行代码
#include <stdio.h> float getBalance (); float quarterOne (float bb1); int main (void) { float bb1; bb1 = getBalance(); // 传入初始余额,调用一季度余额计算函数 quarterOne(bb1); return 0; } float getBalance () { float bb; printf("Beginning Balance: "); scanf("%f", &bb); return bb; } float quarterOne (float bb1) { float Q1; // 补全乘法运算符,修正表达式 Q1 = bb1 * (1+((5.3/100)*0.25)); printf("\t1st Quarter Balance: %.2f",Q1); // 补全返回值 return Q1; }
内容的提问来源于stack exchange,提问作者Lala Lalala
相关产品推荐
相关产品推荐

