작성
·
182
1
안녕하세요.
int flag = scanf("%f", &library[count].price); 에서
int flag라고 변수를 따로만드는 이유는 무엇인가요?
scanf("%f", &library[count].price); 이렇게만 해두는거랑 무슨 차이가있나요?
#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); //공백을 포함한 문자열
if (ret_val)
{
find = strchr(st, '\n'); //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_TITLE) == NULL) break;
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\" written by %s: $%.1f\n",
library[index].title, library[index].author, library[index].price);
}
else
printf("No books to show.\n");
return 0;
}
답변 1
4
안녕하세요?
없애면 Return value ignored: scanf warning이 뜨긴합니다.
아마 이 부분이 불편해서 일부러 지우신게 아닐까 생각이드는군요.
그런데 flag 를 만드신 local scope 내에서 사용하지는 않으므로 크게 의미는 없습니다.