如何使用C语言为文本文件中的每行添加指定分类前缀
代码调整方案
原有代码的核心问题
- 没有按照「歌手名、歌曲名、价格、发行年份」每4行一组的规则匹配对应前缀,每读取1行就打印全部4个前缀,逻辑完全不匹配需求
feof()使用逻辑有误,feof只有在文件读取操作触发EOF标记后才会返回真值,会导致最后一行内容重复读取- 没有处理
fgets读取到的行尾换行符,输出时会出现多余换行
修正后完整实现代码
#include <stdio.h> #include <string.h> int main() { FILE *song_file = fopen("So.txt", "r"); // 增加文件打开失败判断,避免程序崩溃 if (song_file == NULL) { perror("文件打开失败"); return 1; } char singleline[150]; // 计数器:0对应歌手、1对应歌曲、2对应价格、3对应发行年份 int field_index = 0; // 直接用fgets返回值判断是否读取成功,规避feof的逻辑缺陷 while (fgets(singleline, sizeof(singleline), song_file) != NULL) { // 移除fgets读取到的行尾换行符 singleline[strcspn(singleline, "\n")] = '\0'; // 跳过文件中的空行,避免输出多余内容 if (strlen(singleline) == 0) { continue; } // 根据当前字段类型输出对应前缀 switch(field_index) { case 0: printf("Name of singer: %s\n", singleline); break; case 1: printf("Name of song: %s\n", singleline); break; case 2: printf("Price: %s\n", singleline); break; case 3: printf("Year of release:%s\n", singleline); break; } // 计数+1,每4行重置计数器开启下一组 field_index = (field_index + 1) % 4; } fclose(song_file); return 0; }
补充说明
如果需要把处理后的结果写入新文件,只需要新增目标文件指针,把printf替换为fprintf写入目标文件即可。
内容的提问来源于stack exchange,提问作者Python Asker
相关产品推荐
相关产品推荐

