一个通讯录文件,通过输入名字查询对应的其他信息

例如:info.txt :

576aa94a925bdf6e0d24a02f0a9a2b3c592.jpg

编写一个程序,执行效果如下:

662ef489c7049869d04f808aac6adc32165.jpg

实现代码一:

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

int main(void){	
	FILE *file;
	char name[32];
	char f_name[32];
	char tel[32];
	char addr[32];
	
	file = fopen("info.txt","r");
	if(!file){
		printf("打开文件失败");
		return 1;
	}
	printf("请输入要查询的用户名:");
	scanf("%s",name);
	
	while(!feof(file)){
		fscanf(file,"%s Tel:%s Addr:%s\n",f_name,tel,addr); //用整个文件格式化读取,然后对比
		if(!strcmp(name,f_name)){                           //等效 strcmp(name,f_name) == 0
			break;
		}	
	}
	if(feof(file)){
		printf("没有%s的信息",name);
	}else{	
		printf("%s的电话是:%s\n",name,tel);
	}
	fclose(file);
	return 0;
}

       上面代码注意点有:

       1、fscanf 是整个文件格式化读取写入 (当然也可以 用 fgets 单行读取到buff,然后用 sscanf 从buff 格式化写入变量,这样代码量就增加了,可以参考之前的文章:链接

       2、feof( ) 函数的是检测指针流上的文件结束符,通过读取函数 fread / fscanf 等返回错误来识别的(文件结束:返回非0值,文件未结束,返回0值

       如果不好判断 是否匹配成功退出  还是匹配不到 读取完毕退出!  我们还可以这样做

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

int main(void){	
	FILE *file;
	char name[32];
	char f_name[32];
	char tel[32];
	char addr[32];
//---------------------------------------------------------------
	int found = 0;                         //加一个判断变量,初始值为0
//---------------------------------------------------------------	
	file = fopen("info.txt","r");
	printf("请输入要查询的用户名:");
	scanf("%s",name);
	
	while(!feof(file)){
		fscanf(file,"%s Tel:%s Addr:%s\n",f_name,tel,addr);
		if(!strcmp(name,f_name)){
//---------------------------------------------------------------			
                 found = 1;                  //匹配成功,赋值1
//---------------------------------------------------------------				
                 break;
		}	
	}
	if(found){                             //成功匹配,found = 1,if条件成立                       
		printf("%s的电话是:%s\n",name,tel);		
	}else{	
		printf("没有%s的信息\n",name);
	}
	fclose(file);
	return 0;
}

       这是个小技巧,做循环判断时常常用到!

转载于:https://my.oschina.net/u/3979769/blog/2231176

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值