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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:09:02