> 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군요. 상관 없겠죠? -.-;;
- 살아보는 거야... -