追晨小筑
张扬着易逝又不悔的青春。
/*

功能:利用文件首个单词信息查找,单词所在行的完整信息              
作者: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;
}
posted on 2011-05-09 18:16  flonlen  阅读(320)  评论(0编辑  收藏  举报