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

C语言读取特定格式数据集并转换输出格式的实现问题

解决方案:解析特定格式数据集并转换输出

我来帮你搞定这个格式转换的问题!你之前处理空格分隔的数字很简单,但现在要解析带标识符的结构化文本,其实用C语言的fscanf就能轻松搞定——它天生擅长处理这种有固定格式的输入,不用手动拆分字符串。

实现思路

  1. 打开目标文本文件,先做必要的错误检查(比如文件是否存在、能否正常读取)。
  2. 循环读取文件里的每个sample[row][col]=value;单元,用fscanf直接匹配格式,提取出行号row、列号col、数值val这三个关键信息。
  3. 根据列号做格式映射:
    • 当col == 0时,输出(*inputs)[row][0] = val;格式
    • 当col == 1时,输出(*outputs)[row] = val;格式
  4. 直到文件读取完毕,关闭文件。

完整示例代码

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

int main() {
    // 替换成你的数据集文件路径
    FILE *fp = fopen("dataset.txt", "r");
    if (fp == NULL) {
        perror("Failed to open file");
        return EXIT_FAILURE;
    }

    int row, col, val;
    // fscanf格式字符串完全匹配输入的sample[x][y]=z;结构
    while (fscanf(fp, "sample[%d][%d]=%d;", &row, &col, &val) == 3) {
        if (col == 0) {
            printf("(*inputs)[%d][0] = %d; ", row, val);
        } else if (col == 1) {
            printf("(*outputs)[%d] = %d; ", row, val);
        }
        // 若需要换行或调整分隔符,直接修改printf的内容即可
    }
    printf("\n"); // 最后补个换行让输出更整洁

    fclose(fp);
    return EXIT_SUCCESS;
}

代码关键点说明

  • fscanf格式匹配:"sample[%d][%d]=%d;"完全对应你的输入格式,而且fscanf会自动忽略格式中的空白字符——哪怕你的文件里有空格(比如sample[0][0] = 1;),这个格式也能正确读取。
  • 循环终止条件:fscanf返回成功匹配的变量数量,当返回3时说明成功读取了一组数据;当文件读完时返回EOF,循环自动终止。
  • 错误处理:加入了文件打开失败的判断,用perror输出具体错误原因,方便你调试排查问题。

测试效果

如果你的输入文件内容是:

sample[0][0]=1; sample[0][1]=3; sample[1][0]=2; sample[1][1]=4; sample[2][0]=3; sample[2][1]=5;

运行代码后会输出:

(*inputs)[0][0] = 1; (*outputs)[0] = 3; (*inputs)[1][0] = 2; (*outputs)[1] = 4; (*inputs)[2][0] = 3; (*outputs)[2] = 5; 

完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 07:02:51