例如:info.txt :
编写一个程序,执行效果如下:
实现代码一:
#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;
}
这是个小技巧,做循环判断时常常用到!