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

C语言fscanf出现格式化错误,对应变量标红该如何解决?

C语言fscanf格式化错误修复方案

核心问题原因

  • 数组定义错误:char* name[1000][10]、char* quantity[1000][10]是未分配内存的二维字符指针数组,无法直接存储读取的内容,且维度逻辑与你循环10次的代码不匹配。如果你需要存储10条数据,单条字符串最大长度99,应该调整为char name[10][100]、char quantity[10][100];如果你的food.txt中数量字段是类似5kg的格式,只需要读取数值部分,可直接将quantity定义为int quantity[10],适配你原代码中的%d%*s格式符。
  • 格式符类型不匹配:第一行fscanf使用%s匹配float类型的costs_2018、costs_2020变量,%s仅用于读取字符串,float类型必须用%f匹配,这是第一行所有参数都报红的核心原因。
  • 地址传递错误:数组名本身就是指向首元素的地址,不需要额外加取地址符&,&name[i]的类型是数组指针,和%s要求的char*类型不匹配,这是两行fscanf中name、quantity都报红的原因。
  • 可选优化:fopen后需要判断返回值是否为NULL,避免文件不存在导致程序直接崩溃,读取结束后也需要调用fclose释放文件资源。

修正后代码示例

#include <stdio.h>
// 提前声明自定义函数,避免编译隐式声明报错
float calculate_total_cost(float arr[]);
float calculate_total_average(float arr[]);

int main()
{
    FILE* fp = fopen("food.txt","r");
    // 文件打开失败容错处理
    if(fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    float costs_2018[10];
    float costs_2020[10];
    // 修正数组定义:10条数据,单条字符串最长99字符
    char name[10][100];
    // 如果只需要读取数量的数值,把下面这句替换为 int quantity[10]; 即可
    char quantity[10][100];

    // 修正格式符和传参:假设第一行是表头,全部读为字符串
    fscanf(fp,"%s %s %s %s", name[0], quantity[0], name[1], name[2]);
    for (int i=0;i<10;i++)
    {
        // 如果quantity是int类型,格式符保持%d%*s,参数改为&quantity[i]即可
        fscanf(fp,"%s %s %f %f", name[i], quantity[i], &costs_2018[i], &costs_2020[i]);
    }
    printf("total cost in 2018 is = %f\n",calculate_total_cost(costs_2018));
    printf("total cost in 2020 is = %f\n",calculate_total_cost(costs_2020));
    printf("average cost in 2018 is = %f\n",calculate_total_average(costs_2018));
    printf("average cost in 2020 is = %f\n",calculate_total_average(costs_2020));
    printf("Difference in total price between 2018 and 2020 is = %f\n",calculate_total_cost(costs_2018)-calculate_total_cost(costs_2020));
    printf("Difference in average price between 2018 and 2020 is = %f\n",calculate_total_average(costs_2018)-calculate_total_average(costs_2020));
    
    fclose(fp);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 16:36:01