簡體   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