如何在C语言中通过CMD读取文件整数?解决程序无输出问题
C语言读取文件整数:无输出阻塞问题修复方案
问题现象
执行命令c_file.exe input.txt后,程序无任何输出,终端陷入无法输入的阻塞状态。
问题根源
feof的误用:while(!feof(file))的写法逻辑错误,feof仅在尝试读取越过文件末尾后才会标记文件结束,导致最后一次循环会执行无效读取,若文件打开失败还会触发死循环。- 未校验文件打开状态:如果
fopen因文件不存在、权限不足等原因失败,file会被赋值为NULL,后续对NULL文件指针的操作会引发未定义行为,直接导致程序异常阻塞。 - 输出无缓冲刷新:原代码输出无换行,终端输出缓冲区可能未及时刷新,即使程序正常执行也会看起来像无输出。
修复后的完整代码
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int x; int sum = 0; int count = 0; if (argc == 1) { printf("错误:未指定输入文件\n"); return 1; } FILE* file = fopen(argv[1], "r"); if (file == NULL) { printf("错误:无法打开文件 %s\n", argv[1]); return 1; } // 通过fscanf返回值判断是否成功读取整数 while (fscanf(file, "%d", &x) == 1) { sum += x; count++; } printf("总和:%d\n", sum); printf("整数个数:%d\n", count); fclose(file); return 0; }
关键修复说明
- 替换循环终止条件:用
fscanf(file, "%d", &x) == 1替代!feof(file),fscanf成功读取一个整数时返回1,读取到末尾或失败时返回其他值,精准终止循环。 - 添加文件打开校验:检查
file是否为NULL,若打开失败直接输出错误信息并退出,避免后续非法操作。 - 关闭文件资源:使用
fclose关闭文件,防止资源泄漏。 - 优化输出格式:添加描述文本和换行,既让结果更易读,也确保终端缓冲区及时刷新输出。
内容的提问来源于stack exchange,提问作者rayVel
相关产品推荐
相关产品推荐

