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

时间:2019-06-07 15:37:57

标签: 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

1 个答案:

答案 0 :(得分:0)

使用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块。