2015-01-09 62 views
0

我擁有以下代碼,編譯器不會顯示任何錯誤或警告消息。但是,雖然條件滿足了,但它並沒有達到我想要的水平。儘管條件得到滿足,但未輸入if條件

#include <stdio.h> 

int main() 
{ 
    FILE *f,*g; 
    f = fopen("MPCORB_Distant.txt","r"); 
    g = fopen("MPCORB_Distant_AvgKBOValues.txt","w"); 
    float Nbr,H,G,Epoch,M,w,W,i,e,n,a,UP,Ref,Obs,Opp,Arc,rms,Pert1,Pert2, 
     Comp,Type,Name,LastObs; 
    float Res_a,Res_e,Res_i,Res_W,Res_w; 

    while(!feof(f)) 
    { 
     fscanf(f,"%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f\n", 
      &Nbr,&H,&G,&Epoch,&M,&w,&W,&i,&e,&n,&a,&UP,&Ref,&Obs,&Opp,&Arc,&rms,&Pert1, 
      &Pert2,&Comp,&Type,&Name,&LastObs); 

     if (a > 60) 
     { 
      fprintf(g,"%f %f %f %f %f\n",a,e,i,W,w); 
     } 
     else 
     { 
     } 
    } 

    fclose(f); 
    fclose(g); 

    return 0; 
} 

當我在else條件中寫入printf("Hello\n");時,它不會停止寫入。儘管條件很快在讀取的文件列表中完成,但它似乎根本不會進入if條件。

+0

你能發佈txt文件嗎? – 2015-01-09 23:36:29

+0

只是標記此頁面的內容並將其保存到.txt文件中:http://www.minorplanetcenter.net/iau/MPCORB/Distant.txt – Lucas 2015-01-10 13:30:07

回答

0

我沒有測試它,但我認爲問題是fscanf沒有正確讀取線條。您應該檢查fscanf的EOF/Conversion錯誤的返回值,而不是使用feof並依賴讀取操作的成功。

這個問題在這裏:Using fscanf() using feof()似乎描述了同樣的問題,feof的一些細節在這個問題的第一個答案給出:Why is 「while (!feof (file))」 always wrong?

+0

我會通讀它。但我們通過這種方式瞭解到了它,並且它始終如我所願 – Lucas 2015-01-10 13:31:51

+0

那麼如何:while(fscanf(f,「%f%f%f%f%f%f%f%f%f%f%f%f%f%f %f%f%f%f%f%f \ n「,&Nbr,&H,&G,&Epoch,&M,&w,&W,&i,&e,&n,&a,&UP,&Ref, &Obs,&Opp,&Arc,&rms,&Pert1,&Pert2,&Comp,&Type,&Name,&LastObs)!= EOF \t \t ,I,W,W); \t}在.txt文件中,不僅有數字,還有字母。這也可能是一個問題嗎? – Lucas 2015-01-11 19:02:59

+0

是的,我認爲是這樣 - 如果fscanf無法解析某一行,則會將其解壓縮。您可以閱讀該行(例如使用fgets),然後使用sscanf手動解析它。如果該行不能被解析,那麼隨着fgets將繼續讀取你的文件,程序仍然會繼續。 – frow 2015-01-12 11:05:20