2012-06-09 68 views
1

從一個文件讀取行的問題。基本上我的代碼是閱讀一個額外的行比應該與所有變量爲'0'i.e。while(!feof(file))read extra line

如果我的文件是:

0, 0, 3, 64, 0, 0, 0, 0 
2, 0, 6, 64, 0, 0, 0, 0 
4, 0, 4, 64, 0, 0, 0, 0 
6, 0, 5, 64, 0, 0, 0, 0 
8, 0, 2, 64, 0, 0, 0, 0 

它會讀取:

Object 1: 0, 0, 3, 64, 0, 0, 0, 0 
Object 2: 2, 0, 6, 64, 0, 0, 0, 0 
Object 3: 4, 0, 4, 64, 0, 0, 0, 0 
Object 4: 6, 0, 5, 64, 0, 0, 0, 0 
Object 5: 8, 0, 2, 64, 0, 0, 0, 0 
Object 6: 0, 0, 0, 0, 0, 0, 0, 0 

這是我讀的算法:

while (!feof(pfile)) { 

     PcbPtr p = createnullPcb(); 
     fscanf(pfile, "%d,%d,%d,%d,%d,%d,%d,%d", &p->arrivaltime, &p->priority, &p->remainingcputime, 
     &p->memalloc, &p->pr, &p->sc, &p->mo, &p->cd); 
     char cwd[1024]; 
     char *tmp = getcwd(cwd, sizeof(cwd)); 
     strcat(tmp, "/process"); 
     p->args[0] = tmp; 
     p->args[1] = NULL; 

     if (!headi) { 
      headi = p; 
     } 
     else { 
      enqPcb(&headi, p); 
     } 

    } 

這究竟是爲什麼?謝謝你的幫助!

+0

可能是一個新行(ENTER)是在您的輸入文件的末尾 –

+0

@MaziarBouali否我檢查過,見下文。 – Milk

回答

2

發生了什麼是feof返回true當試圖讀取結束。當您處於文件末尾,但尚未嘗試讀取任何其他內容時,feof將返回false

在簡單的話:feof並不代表是在文件結束,但對於試圖訪問過的文件結束。

請注意,當您處於文件末尾並嘗試讀取多餘的行時,fscanf將會失敗。你可以檢查它的返回值,看它是否能夠讀取任何東西。

+0

噢好的,謝謝,所以可能類似於: if(!fscanf(pfile,「%d,%d,%d,%d,%d,%d,%d,%d」,&p-> arrivaltime,&p - >的優先級,和對 - > remainingcputime, \t \t&P-> memalloc,&P-> PR,及對 - > SC,和對 - > MO,及對 - > CD)){ \t \t \t免費(p) \t \t \t休息; \t \t} – Milk

+0

dammit我永遠無法獲得評論代碼工作 – Milk

+0

@Milk:_may_ work,'fscanf'返回匹配參數的數量,因此您檢查它是否與任何參數完全不匹配。評論評論中的代碼使用反引號:' –

相關問題