2015-01-09 2 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; 
} 

나는 그것을 쓰는 중지하지 않는 다른 조건 안에 printf("Hello\n");을 쓸 때. 읽혀지는 파일 목록에서 아주 빨리 성취 되었음에도 불구하고 if-condition을 입력하지 않는 것 같습니다.

+0

txt 파일을 게시 할 수 있습니까? –

+0

이 페이지의 내용을 표시하고 .txt 파일에 저장하면됩니다. http://www.minorplanetcenter.net/iau/MPCORB/Distant.txt – Lucas

답변

0

필자는 테스트하지 않았지만 문제는 fscanf가 제대로 라인을 읽지 못한다고 생각합니다. feof를 사용하거나 읽기 작업 성공에 의존하는 대신 EOF/변환 오류에 대한 fscanf의 반환 값을 확인해야합니다.

이 질문은 여기에 있습니다 : Using fscanf() using feof()은 동일한 문제를 묘사하는 것처럼 보이고 feof에 대한 자세한 내용은이 질문의 첫 번째 대답 인 Why is “while (!feof (file))” always wrong?에 나와 있습니다.

+0

나는 그것을 읽을 것입니다. 그러나 우리는 그것을이 방법으로 배웠고 항상 원했던대로 작동했습니다. – Lucas

+0

무엇에 대해서 : while (fscanf (f, "% f % f % f % f % f % f % f % f % f % f % f % f & N, & H, & G, & Epoch, & M, & w, & W, & i, & e, & n, & a, & UP, & Ref, & f, % f % f % & Obs, & Opp, & Arc, & rms, & Pert1, & Pert2, & Comp, & Type, & Name, & LastObs) \t { \t \t printf ("% f % f % f % f % f \ n", a, e , i, W, w); \t} .txt 파일에는 숫자뿐만 아니라 문자도 있습니다. 이것도 문제 일까? – Lucas

+0

네, 그렇게 생각합니다. fscanf가 특정 라인을 분석 할 수 없다면, 분석되지 않은 채로 남을 것입니다. 예를 들어 fgets를 사용하여 줄을 읽고 sscanf를 사용하여 수동으로 구문 분석 할 수 있습니다. 그 행을 파싱 할 수 없다면, fgets가 계속해서 파일을 읽으므로 프로그램은 계속 진행할 것입니다. – frow

관련 문제