티스토리 뷰

코드 분석

파일에 저장

void save Books(BOOK * mb, int cnt)
{
FILE * fp;
int i;
fp = fopen ("myBooks.txt", "w+");
if (fp == NULL) perror ("Error opening file");
else {
fprintf(fp, "%d₩n", cnt);
for(i=0; i
fprintf(fp, "%s %s %s %d %d₩n", mb[i].bookCode, mb[i].bookTitle, mb[i].bookAuthor, mb[i].bookPrice, mb[i].bookSale);
}
fclose(fp);
}

 

파일에서 읽기

BOOK * readBook(BOOK * mb, int *cn)
{
FILE * fp;
int i, cnt;

fp = fopen ("myBooks.txt", "r+");
if (fp == NULL) perror ("Error opening file");
else{
fscanf(fp, %d, &cnt);
mb = (BOOK *)realloc(mb.size(BOOK) * (cnt+1));
for(i=0; i
fprintf(fp, "%s %s %s %d %d", mb[i].bookCode, mb[i].bookTitle, mb[i].bookAuthor, mb[i].bookPrice, mb[i].bookSale);
}
fclose(fp);
}
*cn = cnt;
return mb;
}

 

선언 및 main 함수

int main()
{
int sel, totalBCnt=0;
BOOK * myBook;
myBook = (BOOK *) calloc(2, sizeof(BOOK));
myBook = readBooks(myBook, &totalBCnt);
while(1){
puts("₩n₩n원하는 메뉴를 선택하세요");

switch(sel){
case 1 : myBook = inBook(myBook, &totalBCnt); break;
case 2 : outBook(myBook, totalBCnt); break;
case 3 : searchBook(myBook, totalBCnt); break;
case 0 : saveBook(myBook, totalBCnt); return 0;
default : puts("0~3 사이의 메뉴 번호를 선택하세요");
}
}
return 0;
}

 

유효성 검사

while(1){
fflush(stdin);
printf("책제목 : ");
gets(mb[cnt].bookTitle);
if(strlen(mb[cnt].bookTitle > 0)
break;
printf("₩n책제목을 입력하세요");
}
while(1){
fflush(stdin);
printf("저자 : ");
gets(mb[cnt].bookAuthor);
if(strlen(mb[cnt].bookAuthor > 0)
break;
printf("₩n저자를 입력하세요");
}

<학습정리>

 

프로그램 설계

  1. 프로그램 개발 시 작업 목표에 맞게 사용할 라이브러리 함수와 자료구조를 결정해야 함
  2. 유효성 검사를 위해서 다양한 함수를 적용하게 처리할 수 있다.
  3. 문자열의 길이는 strlen 함수를 이용하여 빈 입력값을 검사할 수 있다.

코드 분석

  1. 파일 입출력을 위해서는 먼저 입출력을 위한 스트림을 생성해야한다.
  2. 파일 스트림 생성 시 fopen 함수를 이용하고 모드를 함수의 인수로 젂달해야한다.
  3. 형식화된 파일 입출력은 fscanf 와 fprintf 를 이용하여 처리할 수 있다.
댓글
© 2022 chanchaning