C语言调用getArea函数报expected expression before int错误求解
问题根因及修复方案
你遇到的expected expression before int错误由多个语法、逻辑问题共同导致,逐一排查如下:
- 1. 函数未提前声明:你在
main函数上方的函数声明列表中,没有声明getArea函数,编译器在main中遇到getArea调用时无法识别该函数,再结合错误的参数定义触发语法报错。 - 2.
getArea参数定义语法完全错误:你写的double getArea(int[int][int])不符合C语言数组参数的定义规则,且调用逻辑错误:你现在是遍历每个二维数组元素时调用getArea,但计算三角形面积需要每行的3个元素作为三边,应该每遍历完一行调用一次函数。 - 3. 局部变量未初始化:
getArea内部的base、height没有赋值就直接参与计算,得到的结果是随机垃圾值。 - 4.
checkValidation逻辑错误:该函数定义返回值为double但没有return语句,且参数逻辑混淆:你传入的三个参数是三角形三边,不是底、高、面积,三边校验通过后应该返回合法标识,而不是空实现。 - 5. 求和逻辑错误:你调用
func1时传入的ArrayTwoTotal数组未初始化,里面没有存储任何计算得到的面积值,求和结果无意义。
修正后可运行代码
// 程序功能:生成18个随机数存入一维数组,转存为6行3列的二维数组,每行三个数作为三角形三边计算面积,最后求和 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #define COLMAX 3 #define ROWMAX 6 // 提前声明所有用到的函数 double getArea(int a, int b, int c); int checkValidation(double a, double b, double c); double func1(double values[][COLMAX], int rows); int rand_int(); int main(void) { double tArea = 0.0; int loop; int col; int row; int counter = 0; srand(time(NULL)); int RandomArray[18]; int ArrayTwo[ROWMAX][COLMAX]; double ArrayTwoTotal[ROWMAX][COLMAX] = {0}; // 初始化存储面积的数组 printf("\n一维数组内容\n"); for(loop = 0; loop < 18; loop++) { RandomArray[loop] = rand_int(); printf("%d ", RandomArray[loop]); } printf("\n二维数组内容(每行对应三角形三边)\n"); for(row = 0; row < ROWMAX; row++) { for(col = 0; col < COLMAX; col++) { ArrayTwo[row][col] = RandomArray[counter]; counter++; printf("%d\t", ArrayTwo[row][col]); } // 每行读取完三个数后调用面积计算函数 double area = getArea(ArrayTwo[row][0], ArrayTwo[row][1], ArrayTwo[row][2]); ArrayTwoTotal[row][0] = area; // 将合法面积存入数组,不合法存0 printf("对应三角形面积:%.2lf\n", area); } printf("\n"); double total = 0.0; total = func1(ArrayTwoTotal, ROWMAX); printf("所有合法三角形面积总和是 %.2lf \n", total); system ("PAUSE"); return 0; } // 校验三边是否可以构成三角形,合法返回1,不合法返回0 int checkValidation(double a, double b, double c) { if ((a + b > c) && (b + c > a) && (a + c > b)) { return 1; } printf("三边%.2lf、%.2lf、%.2lf无法构成三角形\n", a, b, c); return 0; } // 用海伦公式计算三角形面积,不合法返回0 double getArea(int a, int b, int c) { double sideA = (double)a, sideB = (double)b, sideC = (double)c; if (!checkValidation(sideA, sideB, sideC)) { return 0.0; } double p = (sideA + sideB + sideC) / 2.0; double area = sqrt(p * (p - sideA) * (p - sideB) * (p - sideC)); return area; } // 计算所有面积总和 double func1(double ArrayTwoTotal[][COLMAX], int rows) { double sum = 0.0; int i, j; for(i = 0 ; i < rows ; i++) { for(j = 0 ; j < COLMAX ; j++) { sum += ArrayTwoTotal[i][j]; } } return sum; } // 生成1-100的随机整数 int rand_int() { int x = 0; x = ((rand() % 100)+1); return x; }
补充说明
原代码中你写的底乘高除以二的面积计算逻辑没有对应输入,因为你只有三边数据,所以替换为通用的海伦公式实现,如果你确实需要用底高计算,可以自行调整参数传入逻辑。
内容的提问来源于stack exchange,提问作者Darius _C02
相关产品推荐
相关产品推荐

