You need to enable JavaScript to run this app. C语言开发jukebox文本搜索程序的功能实现问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

C语言开发jukebox文本搜索程序的功能实现问题咨询

C语言jukebox程序开发相关问题整理

项目核心需求

  • 课程项目为开发C语言实现的jukebox(点唱机)程序
  • 基础功能:支持用户输入目标文本文件名、指定搜索字符串,程序遍历对应文件,输出所有包含搜索串的内容行
  • 目标文本规则:共98行,每行固定存储格式为「艺术家名 - 歌曲名」
  • 输出格式要求:匹配结果按「曲目序号 - 艺术家名 - 歌曲名」展示

开发阶段遇到的问题清单

  • 现有代码存在逻辑错误,无法实现预期功能
  • 不明确strstr、getline函数的正确用法与参数传递规则
  • 无法通过printf正确格式化打印检索到的匹配内容
  • 之前尝试逐行打印全文件时,出现每行丢失首个字符的异常

已编写的初始问题代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char fileName[60]; // per definition Jukebox.txt
char searchString[60];
char textinfo[60]; // contains artist and song name

// maximum of letters per line is 60

int temp;
int i = 1;
int x = 0;
size_t result = 100;

FILE *pFile;

int main(void) {

    printf("Please enter file name: ");
    scanf("%s", fileName);


    pFile = fopen("Jukebox.txt", "r");


    if (pFile == NULL) {
        printf("File could not be opened!\n");
    }
    else {

        printf("Please enter search string: ");
        scanf("%s", searchString);


        textinfo = strstr(  );


        printf("%s\n", textinfo);

        for(i = 0; x < 1; i++) {

            char *p = textinfo;

            getline(&p, &list, pFile);

            printf("%d: %s", i , textinfo);


            if((temp = fgetc(pFile)) == EOF) {
                x = 2;
            }
        }
    }

    return 0;

}

代码错误点说明

  • 文件名参数未生效:代码硬编码打开Jukebox.txt,没有将用户输入的fileName作为参数传入fopen
  • 数组赋值语法错误:textinfo是固定长度栈数组,不能直接用赋值运算符接收strstr的返回值
  • 未定义变量:getline调用时传入的list变量无声明
  • 丢首字符问题根源:循环内同时用getline读行、用fgetc单字符预读判断EOF,会把下一行的首个字符提前读取,导致后续读行时缺失首字符
  • 函数使用规则说明:
    • strstr:第一个参数传入待检索的完整字符串(即从文件读取到的每一行内容),第二个参数传入用户指定的搜索字符串;返回值为匹配位置的指针,无匹配时返回NULL
    • getline:第一个参数为指向字符串缓冲区的二级指针,用于存储读取到的整行内容;第二个参数为指向记录缓冲区长度的size_t类型变量的指针;第三个参数为待读取的文件流指针
  • 序号逻辑偏差:循环计数从0开始,不符合曲目序号从1起始的输出要求

内容的提问来源于stack exchange,提问作者elpescador

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 02:36:08