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

C语言从每行格式为字符+double的文件中仅读取双精度浮点数的方法

最优实现方案(按常用编程语言分类)

最优实现取决于使用的开发语言,以下是主流场景的最优写法:

1. C语言(性能优先场景)

直接利用标准IO库的格式匹配能力跳过不需要的内容,不需要手动处理换行、空格等空白字符,fscanf会自动识别并跳过所有空白字符,格式串中用%*c匹配并丢弃行首的单个char字符,直接读取double值即可,性能最高适合大文件场景:

#include <stdio.h>

int main() {
    FILE *fp = fopen("data.txt", "r");
    if (!fp) {
        perror("文件打开失败");
        return 1;
    }
    double val;
    // 格式串说明:%*c匹配并丢弃单个字符,%lf读取双精度浮点数
    while (fscanf(fp, "%*c %lf", &val) == 1) {
        // 此处处理读取到的浮点数val
        printf("%lf\n", val);
    }
    fclose(fp);
    return 0;
}

优势:不需要额外分配行缓冲区,IO次数少,性能最优,自动适配换行、多空格等空白符场景。

2. Python(快速开发场景)

逐行迭代处理不会一次性加载整个文件到内存,大小文件都适用,代码简洁:

double_list = []
with open("data.txt", "r", encoding="utf-8") as f:
    for line in f:
        # 按空白符分割后取第二个元素转浮点型
        num = float(line.split()[1])
        double_list.append(num)

小文件场景可以直接用列表推导式简化写法:

double_list = [float(line.split()[1]) for line in open("data.txt", "r")]

优势:开发效率高,语法简洁,默认自动处理换行符。

特殊场景适配

如果行首不是单个char而是任意长度的字符串,只要分隔符是空白符,只需调整对应格式匹配规则即可:

  • C语言中将%*c替换为%*s,即可丢弃行首任意长度的非空白字符串
  • Python写法无需调整,split()默认按任意空白符分割取第二个元素即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:57:01