<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p> </o:p>

실습 26<o:p></o:p>

<o:p> </o:p>

n  다음과 같이 번호, 이름, 전화번호를 키보드로 입력받아 구조체 변수에 저장한 후에 이 구조체 변수를 이진 파일에 저장하고, 입력이 끝난 후에는 번호를 입력 받아서 그 번호에 해당하는 사람의 정보를 출력하는 프로그램을 작성하시오. (fread(), fwrite(), fseek() 등의 함수 이용)<o:p></o:p>

<o:p> </o:p>

실행예(밑줄친 부분은 키보드로 입력받는 부분)<o:p></o:p>

        번호는? <U>1</U><o:p></o:p>

이름은? <U>홍길동</U><o:p></o:p>

        전화번호는? <U>02-999-9999</U><o:p></o:p>

        계속 입력하시겠습니까? (y/n) : <U>y</U><o:p></o:p>

        번호는? <U>2</U><o:p></o:p>

이름은? <U>김유신</U><o:p></o:p>

        전화번호는? <U>010-111-1111</U> <o:p></o:p>

계속 입력하시겠습니까? (y/n) : <U>n</U><o:p></o:p>

출력할 번호: <U>2</U><o:p></o:p>

김유신, 010-111-1111<o:p></o:p>

<o:p> </o:p>

l  힌트<o:p></o:p>

n  정보를 저장할 이진 파일의 이름은info.dat 로 한다.<o:p></o:p>

<o:p> </o:p>

답안<o:p></o:p>

#include <stdio.h><o:p></o:p>

<o:p> </o:p>

struct person {<o:p></o:p>

       int num;<o:p></o:p>

       char name[20];      <o:p></o:p>

       char phone[20];            <o:p></o:p>

};<o:p></o:p>

<o:p> </o:p>

int main(void)<o:p></o:p>

{<o:p></o:p>

       struct person s;<o:p></o:p>

       FILE *fp = NULL;<o:p></o:p>

       char answer;<o:p></o:p>

       int n;<o:p></o:p>

       long pos;<o:p></o:p>

       <o:p></o:p>

       if( (fp = fopen("c:\\info.dat", "wb")) == NULL )<o:p></o:p>

       {<o:p></o:p>

             printf("출력 파일 개방 실패\n");<o:p></o:p>

             return -1;<o:p></o:p>

       }<o:p></o:p>

<o:p> </o:p>

       do {<o:p></o:p>

             printf("번호는? ");<o:p></o:p>

             scanf("%d", &s.num);<o:p></o:p>

             printf("이름은? ");<o:p></o:p>

             scanf("%s", s.name);<o:p></o:p>

             printf("전화번호는? ");<o:p></o:p>

             scanf("%s", s.phone);<o:p></o:p>

<o:p> </o:p>

             fwrite(&s, sizeof(struct person), 1, fp);<o:p></o:p>

<o:p> </o:p>

             printf("계속 입력하시겠습니까? (y/n) : ");<o:p></o:p>

             scanf(" %c", &answer);<o:p></o:p>

       } while(answer == 'y');<o:p></o:p>

       <o:p></o:p>

       fclose(fp);<o:p></o:p>

<o:p> </o:p>

       if( (fp = fopen("c:\\info.dat", "rb")) == NULL )<o:p></o:p>

       {<o:p></o:p>

             printf("입력 파일 개방 실패\n");<o:p></o:p>

             return -1;<o:p></o:p>

       }<o:p></o:p>

<o:p> </o:p>

       printf("출력할 번호: ");<o:p></o:p>

       scanf("%d", &n);<o:p></o:p>

       pos = (long) (n-1) * sizeof(struct person);//이게(pos) 어떻게 계산 되는거죠? long은 정수형 선언할 떄 쓰는 수식 아닌가요?? 이게 곱해질 수 있나요??

       fseek(fp, pos, SEEK_SET);<o:p></o:p>

       fread(&s, sizeof(struct person), 1, fp);<o:p></o:p>

       printf("%s, %s\n", s.name, s.phone);<o:p></o:p>

       <o:p></o:p>

       fclose(fp);<o:p></o:p>

<o:p> </o:p>

       return 0;<o:p></o:p>

}<o:p></o:p>

>