C语言调用自定义函数赋值时提示expected expression错误如何解决?
问题修复方案
核心错误原因
- 第一类错误:赋值语句的类型标识语法错误
你在create_table内给angle、t、d赋值的三行代码,直接在函数调用前加double属于无效语法。C语言中如果需要强制类型转换,必须将类型名包裹在括号中,写作(double)xxx;而你调用的三个函数本身返回值就是double类型,完全不需要额外转换,直接删掉赋值语句前的double即可。 - 第二类错误:函数前置声明缺失/位置错误
你提到已经尝试添加前置声明但无效,大概率是声明位置不对:三个被调用函数的定义都在create_table之后,必须在create_table的定义之前添加三个函数的前置声明,否则编译器编译到create_table时无法识别这三个自定义函数,同样会抛出表达式错误。 - 可选兼容问题:如果使用C89标准编译,
for循环头部定义double deg=0.0属于非法语法,需要将deg的定义移到create_table函数的变量声明区开头。
修复后的完整代码示例
// 提前定义PI、G #define PI 3.1415926 #define G 9.8 #include <stdio.h> #include <math.h> // 正确添加前置声明,放在create_table之前 double degree_to_radian(double d); double Projectile_travel_time(double a, double v); double Projectile_travel_distance(double a, double v); void create_table(double v) { double angle,t,d; printf("\n\nAngle:\tTime:\tDistance\t\n"); // 若使用C89标准,需将deg的声明移到此处:double deg; for(double deg=0.0; deg<=90.0; deg+=5.0) { // 删掉多余的double关键字 angle = degree_to_radian(deg); t = Projectile_travel_time(angle, v); d = Projectile_travel_distance(angle, v); printf("%lf\t%lf\t%lf\n",angle,t,d); } } double Projectile_travel_time(double a, double v) { double t; t=2*v*sin(a)/G; return t; } double Projectile_travel_distance(double a, double v) { double d; d=pow(v,2)/G*sin(2*a); return d; } double degree_to_radian(double d) { double rad; rad = d*PI/180; return rad; }
内容的提问来源于stack exchange,提问作者Ethanol
相关产品推荐
相关产品推荐

