2014-02-08 2 views
0

나는 다음과 같은 프로그램이 있습니다 : 아직
./standard <data.txt> results.txt
:
파일 끝에 숫자를 읽는 방법?

1.0 
1.2 
1.3 
1.4 
1.5 
1.6 
1.7 
1.8 
1.9 
2.0 

프로그램 컴파일 후, 실행 :

#include <stdio.h>  // printf, scanf definitions // 
#include <math.h>  // sqrt function // 


int main(void) 
{ 
    double number;  // input- a number of a set // 
    double avg;   // output - average // 
    double sdev;  // output - standard deviation // 
    double numSq;  // output - input squred // 

    int count = 0;  // number of numbers counter // 
    int status;   // status of scanf function // 
    avg = 0; 
    numSq = 0; 

    do{ 
     status = scanf("%lf", &number); 

     // Testing Purposes // 
     // printf("%f\n", number); 

     if (status == 1 && number !=EOF) 
     { 
      if (number >=0) 
      { 

      avg += number; 
      numSq += number * number; 
      count +=1; 
      } 
      else if(number <0) 
      { 
       avg -= number; 
       numSq += (number * number); 
       count +=1; 
      } 
     } 
     // Make an else for negative numbers and if scanf fails // 
     } 
     while (number !=EOF); 

     avg = avg/count; 
     numSq = numSq/count; 
     sdev = sqrt(numSq - (avg * avg)); 

     printf("The average is %.4f \n", avg); 
     printf("The standard deviation is %.4f \n", sdev); 

     return 0; 
} 

가 나는 또한 포함 data.txt라는 텍스트 파일을을 아무 반응이 없습니다! 이 그림과 같이 깜박이는 점이있는 빈 터미널은 다음을 나타냅니다.

내 생각 엔 프로그램이 루프에 고정되어 있지만 그 이유는 무엇입니까? 어떻게 해결할 수 있을까요? numberEOF 사이

답변

1

귀하의 비교는 파일의 마지막에 이르렀을 경우 scanf 어떤 특정 값으로 number을 설정하지 않습니다, 이해가되지 않습니다. 대신 EOF이됩니다.

파일 끝을 확인하기 위해 테스트해야하는 것은 status == EOF입니다.

status != 1 사실은 파일 끝이나 유효하지 않은 입력이 있었기 때문에 실제로 루프에서 벗어나야합니다. 후자의 경우 적절한 오류보고를 시도하고 수행하십시오.

+0

도움을 주셔서 감사하지만 여전히 문제가 해결되지 않습니다. –

+0

저에게 맞습니다. 첫 번째 테스트 (if에서)를 제거하고 두 번째 테스트 (while)를 변경하십시오. – Mat

+0

정말 고마워요. –

2

1. 파일의 위치 끝을 알 수 있지만 파일 끝의 값을 검색 할 수 없습니다. 2. 우리는 function of scanf 계열의 반환 상태를 사용할 수 있습니다. 귀하의 경우 루프 상태! = - 1을 실행해야합니다. 3. 우리는 scanf를 사용하여 리디렉션 된 파일의 입력을 읽을 수 있습니다. 4. 다음 코드는 도움이됩니다.

#include <stdio.h>  // printf, scanf definitions // 
#include <math.h>  // sqrt function // 


int main(void) 
{ 
    double number=0;  // input- a number of a set // 
    double avg;   // output - average // 
    double sdev;  // output - standard deviation // 
    double numSq;  // output - input squred // 

    int count = 0;  // number of numbers counter // 
    int status;   // status of scanf function // 
    avg = 0; 
    numSq = 0; 
     FILE *fp=NULL; 
     fp=fopen("data.txt","r"); 
    do{ 
     //status = scanf("%lf", &number); 
     status=fscanf(fp,"%lf", &number); 
     printf("status:%d number:%lf\n",status,number); 
     sleep(1); 

     // Testing Purposes // 
     // printf("%f\n", number); 

     if (status == 1 && number !=EOF) 
     { 
      if (number >=0) 
      { 

avg += number; 
      numSq += number * number; 
      count +=1; 
      } 
      else if(number <0) 
      { 
       avg -= number; 
       numSq += (number * number); 
       count +=1; 
      } 
     } 
     // Make an else for negative numbers and if scanf fails // 
     } 
     while (status !=-1); 
     avg = avg/count; 
     numSq = numSq/count; 
     sdev = sqrt(numSq - (avg * avg)); 

     printf("The average is %.4f \n", avg); 
     printf("The standard deviation is %.4f \n", sdev); 

     return 0; 
} 
관련 문제