<?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>
댓글 0