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

为什么我编写的从数组计算平均值的C语言代码编译报错?

编译报错直接原因

你遇到的编译错误expected const char but argument is of int type由printf(average);这行代码触发:
printf的第一个入参要求是const char类型的格式控制字符串,你直接传入int类型的average不符合参数类型要求,修改为printf("%d\n", average);即可解决该编译错误。

代码其余潜在问题

就算解决上述编译错误,你的代码运行也会出现异常,还需要修复以下问题:

  • 缺失头文件引用:调用了exit()函数但没有引入对应的<stdlib.h>头文件,会触发隐式声明警告,需要在代码头部加#include <stdlib.h>。
  • 统计有效元素的逻辑完全错误:
    1. weightSet是int类型数组,元素和NULL(指针常量)比较本身类型不匹配,同时未初始化的数组未读入位置的值是随机垃圾值,无法通过值判断是否为有效元素。
    2. 内层用while循环会导致死循环:只要weightSet[j]不为0就会反复累加同一个值,导致sum和size无限增大。
    3. 你在读入数据时已经用变量i记录了有效元素的个数,直接使用i作为size即可,不需要额外写遍历判断逻辑。
  • 数组越界风险:读入数据的循环没有判断i是否超过数组最大长度10000,文件数据量超过数组容量时会出现越界写内存的问题。
  • 冗余变量:定义的int weight全程没有使用,属于无用代码。
  • 整数除法截断:sum和size都是int类型,直接整除会丢弃小数部分,如果需要保留精度可以转浮点运算输出。

修复后可正常运行的代码

#include <stdio.h>
#include <stdlib.h>

int main(){
    FILE *file;
    file = fopen("elephantArray.txt", "r");
    if( file == NULL){
        fprintf(stderr, "Can't open input file elephantArray.txt!\n");
        exit(1);
    }
    int weightSet[10000];
    int i = 0;
    // 加i < 10000判断避免数组越界
    while(i < 10000 && fscanf(file, "%d\t", &weightSet[i]) != EOF){
        printf("%d\n", weightSet[i]);
        i++;
    }
    fclose(file);

    int sum = 0;
    // 直接用i作为有效元素的数量
    for(int j=0; j < i; j++){
        sum += weightSet[j];
    }
    int average = sum / i;
    // 修正printf参数
    printf("平均值为:%d\n", average);
    // 如果需要保留小数可以用以下写法
    // printf("平均值为:%.2f\n", (double)sum / i);
    return 0;
}

内容的提问来源于stack exchange,提问作者ani2016

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:39:00