2013-04-02 3 views
1

내 프로그램에서는 숫자 목록이있는 dat 파일을 읽어야합니다. 내 목표는 각 숫자를 가져 와서 배열에 추가하는 것입니다. 이 파일 형식에 약 100 수 있습니다dat 파일을 읽고 배열에 숫자 추가하기

1

2

3

(스타일링 조금 떨어져서 미안;) 원경

을 난 가지고있다

int main() 
{ 
    double prices[1000]; 
    int count,price; 

    FILE *file; 
    file = fopen("price.dat","r"); 
    if(file == NULL) 
    { 
     printf("Error: can't open file to read\n"); 
    } 
    else 
    { 
     printf("File prices.dat opened successfully to read\n"); 
    } 
    if (file){ 
     while (fscanf(file, "%d", &price)!= NULL){ 
      count++; 
      prices[count]=price; 
     } 
    } 
    fclose(file); 
} 

마지막 숫자를 계속해서 계속 추가하는 것이 문제입니다. 어떤 도움이 필요합니까?

+0

'fscanf'는 절대로 NULL을 반환하지 않습니다. [문서] (http://pubs.opengroup.org/onlinepubs/007908775/xsh/fscanf.html)에서 반환 값을 확인하십시오. 'null'대신에 –

+0

을 사용하면 'EOF'가 사용됩니다. 또한 임의의 메모리 바이트를 가져 오지 않고 카운트를 0으로 설정하십시오. – Shark

답변

2

코드에 몇 가지 문제가 있습니다. 몇 이름을 지정하려면 : 당신이 NULL와 비교해서는 안 있도록

  • fscanf

    포인터를 반환하지 않습니다. 모두 scanf 함수는 양수, 음수 또는 음수 일 수있는 정수를 반환합니다.
  • count을 초기화하지 않으므로 임의의 값이 포함됩니다.
  • 배열 인덱싱은 0을 시작하므로 할당 후 배열 인덱스 count을 늘리지 않아야합니다.

중단을 원하지 않는 실제 문제는 첫 번째 지점 때문입니다.

+0

도움을 주셔서 감사합니다! while 루프가 같거나 같지 않아야하는 부분을 이해하는 데 여전히 문제가 있습니다. 무엇을 비교해야합니까? – dLiGHT

+0

@dLiGHT ['fscanf'] (http://en.cppreference.com/w/c/io/fscanf) 참조, 특히 반환 값에 대한 절을 읽으십시오. –

+0

필자는 그것을 읽었을 때 만나는 값의 수를 반환하고, 조기에 끝나면 0을 반환하고, 첫 번째 매칭 실패 이전에 끝나면 EOF를 반환한다는 것을 이해합니다. 나는 진술이 무엇과 동등하지 않다고 생각하는지에 대해 바보가되어야한다. [ – dLiGHT

1
#include <stdio.h> 
#include <string.h> 

#define PRICES_LIST_MAX  1000 
#define PRICES_FILE   "price.dat" 

int main() 
{ 
    double prices[PRICES_LIST_MAX]; 
    int count = 0; 
    int i = 0; 

    FILE *file; 
    file = fopen(PRICES_FILE,"r"); 
    if(!file) 
    { 
     perror("Error opening file"); 
     return -1; 
    } 

    memset(prices, 0, sizeof(prices)); 
    while (!feof(file)    /* Check for the end of file*/ 
     &&(count < PRICES_LIST_MAX)) /* To avoid memory corruption */ 
    { 
     fscanf(file, "%lf", &(prices[count++])); 
    } 
    fclose(file); 

    /* Print the list */ 
    printf("Prices count: %d\n", count); 
    for(i = 0; i < count; i++) 
    { 
     printf("Prices[%d] = %lf\n", i, prices[i]); 
     } 

     return 0; 
} 
관련 문제