2014-10-12 3 views
0

데이터 내의 최소, 평균 및 최대 값을 생성하기 위해 txt 파일에서 데이터를 정렬하는 기능을 만들고 있습니다.C 파일에 대한 포인터를 인수로 함수에 전달

여러 파일에서이 기능을 다시 사용하고 싶습니다. 따라서, 파일에 대한 포인터를 인수로 함수에 전달하고 싶습니다. 그러나 컴파일러에서 다음과 같은 오류가 발생합니다 :

LA1.c : 19 : 10 : 오류 : 알 수없는 형식 이름 'FILE' void mmm (FILE * ifile, int *, int * min, int * max, float * mu);

아래 코드를 첨부했습니다. 외래 변수의 일부를 나중에 예상 했으므로 제외 시키십시오. 그러나이 프로그램의 대부분을 완료하지 않았습니다. 어떤 도움을 주셔서 감사합니다.

미리 감사드립니다. 컴파일러는 아직 FILE 유형의 정의를 볼 수 없습니다, 그래서

/* Purpose: (1) Sort Data from 5 different years (2) Calculate Standard Deviation */ 
/* (3) find max & min from each set (4) calculate deviation standard deviation */ 
/* units, AKA σ (5) convert to letter grade */ 
/*************************************************************************/ 


/* Outline: (A) funct: scan data ifile (main) calc mean (μ), max, min */ 
/* (B) funct: rescan data and calc sigma (C) main: Rescan data, calc Δ μετα' σ and letter */ 
/* grade each for each datum. (D) Print to minitor in main. Use dow while?loop for rows*/ 
/*************************************************************************/ 

/*prototypes*/ 

void mmm(FILE *ifile, int *i, int *min, int *max, float *mu); 
/* mmm stands for min, max, mean */ 

float sigma (int *num, float *sigma);  /*calculates sigma(standard deviation) */ 

/* libraries */ 

#include <stdio.h> 
#include <math.h> 

void main (void) { 

/* main variable declarations max of i vars used for rows loop counter in main */ 


float sigma, mu; 
int i, i09, i10, i11, i12, i13, min, max, f09max, f09min, f10max, f10min, f11max, 
f11min, f12max, f12min, f13max, f13min;  

FILE *ifile; 

ifile=fopen("2009.txt", "r"); 


mmm(&ifile, &i, &min, &max, &mu); 

fclose(ifile); /* file must be closed to rescan in other functions */ 

} 

void mmm(FILE *ifile, int *i, int *min, int *max, float *mu) { 

printf("running function mean \n"); 

int sum, num; 

*max=0; /* Score range is between 0 and 100 in a class, thus use of fixed initials */ 
*min=100; 
*i=0; 
num=0; 
sum=0; 

    while (fscanf(ifile, "%i", &num) !=EOF) { 

    printf("Variable num is %i. \n", num); 

    fscanf(ifile, "%d", &num); 

     if (num>*max) {*max=num;} /* assigns global max and min */ 
     if (num<*min) {*min=num;} /* to be stored to different years in funct main*/ 

    *i=*i+1; 

    sum= sum + num; /* sums for average calculation */ 

    } 

*mu= ((float)sum/(*i)); 

printf("The min is %i. The max is %i.\n", *min, *max); 
printf("i is %i, sum is %i, and mu is %f \n", *i, sum, *mu); 

} 
+0

#include 문을 맨 위에 넣으려고 했습니까? – dramzy

답변

2

당신은 #include <stdio.h> 라인 전에 함수를 선언하고 있습니다. #include 행을 파일의 맨 위로 이동하십시오.

+0

그건 의미가 있습니다. 고맙습니다. 나는 일반적으로 그런 식으로 형식화 된 코드를 가지고 있으며, 지금까지 이탈하지 않았다. 나는 좋은 이유가 있다고 생각하지 않지만 실수를 한 것은 처음이었고, 전에는 오류를 보지 못했습니다. – Eric

1

C에서 모든 선언은 사용되기 전에 있어야합니다. FILEFILE 인 함수 프로토 타입 뒤에 이 선언 된 헤더 파일을 포함하므로 컴파일러는 그 지점 (함수 선언에서)에서 선언을 보지 못했기 때문에 FILE이 무엇인지 알 수 없습니다.

0

C의 '#include'문은 전 처리기 지시문입니다. 선행 처리기는 소스 코드에서 C 컴파일러가 호출 한 프로그램으로,이 지시문에 제공된 명령을 따르고 컴파일 전에 파일에서 텍스트 조작을 수행합니다. `#include '명령문을 보면, 그 파일을 잡고 코드에 삽입합니다. 함수 프로토 타입 뒤에 이러한 지시문을 배치하면 해당 지시문을 따르는 프로그램 부분에서만 다른 소스 파일에 정의 된 모든 유형을 볼 수있게됩니다. 그래서, 기본적으로 프로그램의 맨 위에 이런 전처리 지시문을 두어 모든 코드에서 사용할 수있게 만듭니다.

관련 문제