2015-01-09 111 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