如何用C语言仅复制源文件中第三列末尾为5的行到新文件
问题分析
你原来的代码存在几个明显问题:
- 未声明
fptr1、fptr2、c变量,存在编译错误 - 逻辑拆分混乱,前面的
fscanf读取了部分源文件内容,后续逐字符复制时指针已经偏移,会漏掉前面的内容 - 没有按行筛选的判断逻辑
修改思路
我们可以逐行读取源文件内容,拆分出第三列后判断最后一位是否为'5',符合条件的行直接写入目标文件即可。
完整修改后代码
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { // 源文件指针统一命名为fptr1,避免混淆 FILE* fptr1 = fopen("data.txt","r"); char filename[100]; char line_buf[200]; // 存储整行内容 char col1[50], col2[50], col3[50]; // 存储三列内容 if (fptr1 == NULL) { printf("no such file."); return 0; } printf("Create a file \n"); scanf("%s", filename); FILE* fptr2 = fopen(filename, "w"); if (fptr2 == NULL) { printf("Cannot open file %s \n", filename); fclose(fptr1); exit(0); } // 逐行读取源文件 while (fgets(line_buf, sizeof(line_buf), fptr1) != NULL) { // 拆分三列,忽略换行符等空白字符 if (sscanf(line_buf, "%s %s %s", col1, col2, col3) == 3) { int col3_len = strlen(col3); // 判断第三列最后一个字符是否为'5' if (col3_len > 0 && col3[col3_len - 1] == '5') { // 符合条件则写入整行到目标文件 fputs(line_buf, fptr2); } } } printf("\nContents copied to %s", filename); fclose(fptr1); fclose(fptr2); return 0; }
关键修改说明
- 用
fgets逐行读取源文件,保证每行内容完整保留 - 用
sscanf拆分每行的三列内容,不需要手动处理字符串拆分 - 取第三列的最后一个字符判断是否等于
'5',符合条件才写入目标文件 - 补全了所有未声明的变量,修正了语法错误,增加了异常场景下的文件关闭处理
内容的提问来源于stack exchange,提问作者Regular User
相关产品推荐
相关产品推荐

