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:第一个参数传入待检索的完整字符串(即从文件读取到的每一行内容),第二个参数传入用户指定的搜索字符串;返回值为匹配位置的指针,无匹配时返回NULLgetline:第一个参数为指向字符串缓冲区的二级指针,用于存储读取到的整行内容;第二个参数为指向记录缓冲区长度的size_t类型变量的指针;第三个参数为待读取的文件流指针
- 序号逻辑偏差:循环计数从0开始,不符合曲目序号从1起始的输出要求
内容的提问来源于stack exchange,提问作者elpescador
相关产品推荐
相关产品推荐

