작성
·
226
0
구조체 연습 문제중 s_gets 함수를 통해서 책 이름을 적는 코드중에
저는 if문을 사용하지 않고
s_gets(library[count].title, MAX_AUTHOR) ;
로 문장을 끝내었는데,
강의에서는
if (s_gets(library[count].title, MAX_AUTHOR) == NULL) break;
이렇게 작성을 해주셨습니다.
분명히 전 강의해서 설명 해주셨던거 같아서 계속 찾아보다가 찾을 수 없어서 이렇게 질문을 드립니다.
왜 저렇게 작성을 하셨는지 알려주실수 있으신가요?
답변해주시면 감사드리겠습니다. ( 밑에는 강의 예제 코드를 올려드리겠습니다.)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define MAX_TITLE 40
#define MAX_AUTHOR 40
#define MAX_BOOKS 3
char* s_gets(char* st, int n)
{
char* ret_val;
char* find;
ret_val = fgets(st, n, stdin); // scanf 불가
// 빈칸이 있는 문자열 입력 받을 수 있다.
if (ret_val)
{
find = strchr(st, '\n');
if (find)
*find = '\0';
else
while (getchar() != '\n')
continue; // 버퍼를 지워버린다.?!?!?!?!?!?!?!?!?
}
return ret_val;
}
struct book
{
char title[MAX_TITLE];
char author[MAX_AUTHOR];
float price;
};
int main()
{
struct book library[MAX_BOOKS] = { {"Empty","Empty",0.0f} }; //-> 기본적으로 초기화 하는 코드
int count = 0;
while (1)
{
printf("Input a book title or press[Enter] to stop.\n>>");
//if (s_gets(library[count].title, MAX_AUTHOR) == NULL) break; 이 부분이 궁금한데 답변해주시면 감사드리겠습니다.
s_gets(library[count].title, MAX_AUTHOR);
if (library[count].title[0] == '\0') break;
printf("Input the author . \n>>");
s_gets(library[count].author, MAX_AUTHOR);
printf("Input the price . \n>>");
int flag = scanf("%f", &library[count].price);
while (getchar() !='\n')
continue;
count++;
if (count == MAX_BOOKS)
{
printf("No more books . \n");
break;
}
}
if (count > 0)
{
printf("\nThe list of books :\n");
for (int index = 0; index < count; index++)
printf("\%s\" wiritten by %s: $%.1f\n",
library[index].title, library[index].author, library[index].price);
}
else
printf("No books to show. \n");
return 0;
}