/* 功能:利用文件首个单词信息查找,单词所在行的完整信息 作者:flonlen 文件名:searchchar.c */ #include<stdio.h> #include<string.h> /***** 函数功能:读入文件指针,返回要查找的字符串首地址的指针 ********/ char * search(FILE * file_open,char *file_char3) { char file_char2[20] = "\0"; //存储每一行的首个单词字符串 char file_char[100] = "\0"; //存储每一行正行字符串 int i = 0; do { fgets(file_char,30,file_open); //读取整行字符串 for(i = 0;i < 20;i++) //清除残留字符 file_char2[i] = '\0'; i = 0; while(file_char[i] != ' ') //读取字符串的首个单词 { file_char2[i] = file_char[i]; i++; } i = 0; if(feof(file_open)) //文尾结束循环 break; }while(strcmp(file_char2,file_char3) != 0); if(strcmp(file_char2,file_char3) != 0) //如果找到要找的单词,返回从新输入 { printf("输入错误!\n"); return NULL; } i = strlen(file_char3); while(file_char[i] == ' ') //判断下一个单词的其实位置 i ++; return file_char + i ; //返回从下一个单词开始的字符串 } /********************* 主函数 ************************/ int main(int argc, char *argv[]) { FILE * file_open; char file_name[30],out_char; //文件名、功能判断符 char file_char3[20] = "\0"; //存储要查询的单词 char *p; //字符串首地址指针 PRINT_FILE: printf("请输入要查找的文件名称:"); scanf("%s",file_name); file_open = fopen(file_name,"r"); //打开文件 if(file_open == NULL) { printf("输入错误,请从新输入!\n"); goto PRINT_FILE; } FILE_INFO: fseek(file_open,0L,SEEK_SET); //将文件的指针指向文首 printf("请输入要查找的信息:"); scanf("%s",file_char3); //输入要查询的首字符串 p = search(file_open,file_char3); //输入文件指针和要查找字符串的首地址指针,并返回具体信息 if(p == NULL) goto FILE_INFO; printf("\n%s\n",p); printf("重新输入信息请输入1,重新输入文件名请输入2,退出请输入任意键:"); getchar(); out_char = getchar(); //定义接下来的动作 if(out_char != '1' && out_char != '2') //判断接下来的动作 { fclose(file_open); return 0; } switch(out_char) //判断接下来的动作 { case '1': goto FILE_INFO; case '2': goto PRINT_FILE; } fclose(file_open); //关闭文件操作 return 0; }