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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:24:04