/*
功能:利用文件首个单词信息查找,单词所在行的完整信息
作者: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;
}