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

C语言读取TXT文件双精度数值失败问题求助

问题原因及修复方案

核心问题1:void函数非法返回值

你的read_prop_data函数声明为void类型,但在文件打开失败时执行了return 1;——void函数不允许返回任何值。这个错误会导致程序行为异常,甚至跳过后续错误处理逻辑,直接执行后面的fscanf操作。

核心问题2:空指针下的非法IO操作

当fopen失败返回NULL时,你没有终止函数的后续执行,代码继续调用fscanf对NULL指针进行操作,这属于未定义行为,会导致变量无法被正确赋值,最终输出初始的0.0。

修复后的代码

#include <stdio.h>

// 改为int类型,返回状态码表示成功/失败
int read_prop_data(double *prop1, double *prop2, double *prop3, double *prop4) {
    FILE *file_pointer = fopen("prop_dati.txt", "r");
    if (file_pointer == NULL) {
        printf("Unable to open file\n");
        return 1; // 返回错误码
    }

    // 一次性读取并检查读取是否成功
    int read_count = fscanf(file_pointer, "%lf%lf%lf%lf", prop1, prop2, prop3, prop4);
    if (read_count != 4) {
        printf("Failed to read 4 values, only read %d\n", read_count);
        fclose(file_pointer);
        return 1;
    }

    printf("The values of the properties are: %lf %lf %lf %lf\n",
           *prop1, *prop2, *prop3, *prop4);

    fclose(file_pointer);
    return 0; // 返回成功码
}

int main() {
    double prop1, prop2, prop3, prop4;
    read_prop_data(&prop1, &prop2, &prop3, &prop4);
    return 0;
}

额外说明

  • fscanf会自动跳过换行符、空格等空白字符,所以文件里每行一个数值的格式完全兼容,不需要额外处理换行。
  • 增加读取计数检查,可以及时发现文件内容不足或格式错误的情况,避免后续使用未初始化的变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:37:13