c语言中对文件的操作,解释带问号语句

intbrowse(char*key,fpos_t*p,CON*s){FILE*f=0;//???????inti=0,r=0;CONt;char*a=0,*b=0;fp... int browse(char * key, fpos_t * p, CON * s)
{
FILE * f =0; //???????
int i = 0, r = 0; CON t;
char * a = 0, * b = 0; fpos_t q; //????????
if(!s) //?????????????????
return 0;
f = fopen(fileDB, "rb");
if(!f) {
printf("数据库暂无记录\n");
return 0;
}/*end if*/
printf("编号\t姓名\t单位\t电话\t电邮\n");
printf("------------------------------------------------\n");
while(!feof(f)) //????????????
{
fgetpos(f, &q);//?????????????
r = fread(&t, sizeof(t), 1, f);//??????????????
if(r<1)break;
if(t.name[0]==0)
continue;
if(key)
{
a = strstr(t.name , key);//????????????????
b = strstr(t.tele , key);
if(a == 0 && b == 0)
continue;
}/*end if*/
if(p) *p = q;
if(s) memcpy(s, &t, sizeof(t));//??????????????
i++;
show(i, &t);//?????????????
}/*end while*/
fclose(f);
printf("------------------------------------------------\n");
return i;
}/*end browse*/
展开
 我来答
风若远去何人留
2014-03-13 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20403 获赞数:450164
专业C/C++软件开发

向TA提问 私信TA
展开全部

看代码中注释

不懂处再追问

int browse(char * key, fpos_t * p, CON * s)
{
 FILE * f =0; //定义一个空文件指针 相当于FILE *f=NULL;
 int i = 0, r = 0; CON t;
 char * a = 0, * b = 0; fpos_t q; //这里是三个变量定义a ,b为字符指针char* 型,并赋值为空(NULL). q为fpos_t型,可以认为是int 无初始化值
 if(!s)              //判断传入参数 等同于if(s == NULL) 即如果传入的s指针为空 则直接返回
return 0;
 f = fopen(fileDB, "rb");
 if(!f) {
  printf("数据库暂无记录\n");
  return 0;
 }/*end if*/
 printf("编号\t姓名\t单位\t电话\t电邮\n");
 printf("------------------------------------------------\n");
 while(!feof(f)) //判断是否达到文件结尾。 如达到文件结尾(feof(f)=true) 则退出循环 不再读文件
 {
  fgetpos(f, &q);//获取当前文件偏移 即读取文件到哪个字节了
  r = fread(&t, sizeof(t), 1, f);//从文件中拂去sizeof(t)个字节数据 并存到变量t中
  if(r<1)break;
  if(t.name[0]==0)
 continue;
  if(key)
  {
   a = strstr(t.name , key);//从t.name中查找是否存在key子串 如果存在 返回key所在的地址,不存在返回NULL
   b = strstr(t.tele , key);
   if(a == 0 && b == 0) //t.name和t.key中都没有key
  continue;
  }/*end if*/
  if(p) *p = q;
  if(s) memcpy(s, &t, sizeof(t));//复制t中的数据到s中。 由于刚进函数时判断过s 所以这里的if(s)是多余的
  i++;
  show(i, &t);//这个不是系统函数 应该是自定义的。 从命名上看 应该是打印t中数据的值
 }/*end while*/
 fclose(f);
 printf("------------------------------------------------\n");
 return i;
}/*end browse*/

综合: 这个函数就是从fileDB中读取数据,并查找每一项 如果在t.name或者t.tel中存在key值(检索关键字)则在参数s中返回查找到的条目,并在参数p中返回该条目所在的偏移量。 该函数返回值为查找到的符合条件的总条目数

存在的问题:如果在fileDB中存在超过一条的符合数据,只会返回最后一条的详细数据 

如果没有找到 则p和s值都不会改变 只有通过返回值才能判断出查找失败

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式