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
相关产品推荐
相关产品推荐

