dataBase

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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군요. 상관 없겠죠? -.-;;

  


-  살아보는 거야... -

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.