[ dataBase ] in KIDS 글 쓴 이(By): ahsarang (은밀하게) 날 짜 (Date): 2000년 9월 6일 수요일 오전 09시 43분 41초 제 목(Title): Re: [질문] 텍스트 파일 읽을때 > 1.txt > CHOIsunmoo19880101 5.08 > PARKkallie19690302 5.20 > LEE ARBY 19800201 6.00 > > struct pinfo > { char id[4]; > char fname[6]; > double birthdate[8]; > double height[5]; > } person; > > 2.txt > CHOI3.40 > LEE 3.20 > KIMI3.30 > > struct finfo > { char id[4]; > double gpa[5]; > } gper; > 우선, struct가 잘못 정의된듯 합니다. char id[4]는 4개의 문자를 저장하겠다는 뜻이고, double gpa[5] 는 5자리 double형 데이터를 저장한다는 뜻이 아니라, double형 데이터 5개을 저장할 배열을 의미합니다. (질문을 보니 왠지 이렇게 생각하고 계신듯하여...) 2.txt에서... 제가 보기엔 의도한바가 typedef struct finfo { char id[5]; /* id가 4자리까지만 허용돼도 null문자를 위해 5로 */ double gpa; } finfo; 이렇게 해야 맞을거 같군요. 한 개의 struct에 한 줄의 데이터가 들어갑니다. 1.txt를 위한 struct에서 birthdate는 double로 잡는 것보단 int나 char[9]로 잡으시는게 좋을 듯합니다. 저라면 char[9]로 잡겠군요. 생일을 비교할일이 많지않다면 특히... typedef struct pinfo { char id[5]; char fname[7]; char birthdate[9]; double height; } pinfo; > gpa >= 3.30 을 만족하는 사람의 fname과 birthdate을 출력하고자 합니다. #define BUFF_SIZE 127 #define ID_LEN 4 finfo info; FILE *infile = fopen("2.txt", "r"); char buffer[BUFF_SIZE]; info.id[ID_LEN] = 0; while (!feof(infile) { fgets(buffer, BUFF_SIZE, infile); strncpy(info.id, buffer, ID_LEN); sscanf(buffer + ID_LEN, "%lf", &info.gpa); if (info.gpa >= 3.30) { /* 1.txt정보를 가지고 있는 list를 앞서 만들어 놨다가 여기서 info.id랑 pinfo.id를 비교해서 해당 fname, birth 출력하면 되겠네요. */ printf("%s\n", info.id); } } fclose(infile); @ 써놓구 보니 C군요. 상관 없겠죠? -.-;; - 살아보는 거야... - |