C语言编译报expected expression错误 用变量作数组长度失败怎么解决
问题修复方案
你代码中存在4处可直接导致编译报错或运行结果异常的问题,修复说明如下:
- 数组定义语法错误:原代码
int scores = [n];不符合C语言数组声明规则,C语言中声明变长数组的正确语法是int scores[n];,不需要等号,也不能将数组长度写在右侧中括号内。 - 数组元素赋值时重复声明:循环内部
int scores[i] = get_int(...)错误,scores已经是声明过的数组,无需再加int关键字重复声明,直接写scores[i] = get_int(...)即可。 - 累加逻辑错误:
average函数中sum += sum + array[i];逻辑有误,该写法会让sum每次累加自身当前值再加数组元素,最终结果是预期值的数倍,正确写法应为sum += array[i];。 - 函数未前置声明:
average函数定义在main函数之后,调用前没有声明函数原型,编译器会无法识别average函数,需要在main前增加函数原型声明,或者将average函数移到main之前。
修正后的完整代码如下:
#include <stdio.h> #include <cs50.h> // 前置声明average函数 float average(int length, int array[]); int main(void) { int n = get_int("Please enter the number of scores: "); // 修正数组声明语法 int scores[n]; for(int i=0; i<n; i++) { // 去掉重复的int声明 scores[i] = get_int("Please, enter the score: "); } printf("Average: %f\n", average(n, scores)); } float average(int length, int array[]) { int sum = 0; for(int i = 0; i < length; i++) { // 修正累加逻辑 sum += array[i]; } return sum / (float)length; }
补充说明:如果你的编译器不支持C99标准的变长数组特性,可以改用malloc动态分配内存,对应修改数组声明部分为int *scores = malloc(n * sizeof(int));,使用完后记得加free(scores);释放内存即可。
内容的提问来源于stack exchange,提问作者KabdeshK
相关产品推荐
相关产品推荐

