繁体   English   中英

可以使用fscanf读取直到EOF? C

[英]It it possible to to read using fscanf till EOF ? C

我正在编写从txt文件读取名称,姓氏和数字并将其保存到结构的函数。 文件中的变量以这种方式排列

姓名| 姓|

我的问题是fscanf无法读取EOF前的最后一个数字。

我的代码:

int load_phonebook_t(const char *filename, struct entry_t* p, int size)
{
   int a,i,ilosc=0;
   FILE *fp;
   if(filename==NULL || p==NULL || size<1)
   {
      return -1;
   }    
   fp=fopen(filename,"r");
   if(fp==NULL)
   {
      return -2;
   }
   rewind(fp);
   for(i=0;i<size;i++)
   {
      if(i==size-1)
      {
         a=fscanf(fp,"%s | %s | %d[^EOF]",(p+i)->name,(p+i)->last_name,&(p+i)->number);
      }
      else
      {
         a=fscanf(fp,"%s | %s | %d",(p+i)->name,(p+i)->last_name,&(p+i)->number);
      }
      if(a==3)
      {
         ilosc++;
      }
   }
   fclose(fp);
   return ilosc;
}

我尝试使用fscanf(fp,“%s |%s |%d [^ EOF]”),但是没有用。 我需要一个想法,如何在EOF之前停止阅读或如何正确阅读它。

编辑:

我的.txt文件的最后几行:

Annette | Bening | 378422705
George | C.Scott | 209747332
Burt | Lancaster | 568016673
Louis | Gossett Jr. | 528057525

使用scanf在文件末尾停止很容易。

a=fscanf(fp,"%s | %s | %d",(p+i)->name,(p+i)->last_name,&(p+i)->number);

if (a != 3) {
     /* handle eof; */
     break;
}

还有很多事情要做,包括格式错误的文件以及在增加阵列时读取文件一次,但是,嘿,宝贝们步步为营。 您还将在任何IO或格式错误时到达该eof块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM