c언어 공부하고 있는 대학생입니다. c언어 과제하던 중에 while 루프에서 정수 입력받고, 정수에 따라 조건문 실행하도록 했는데....정수가 아닌 문자열을 입력했을 때 자꾸 scanf에서 반환값이 0이 나옵니다. 그래서 정수 0을 입력했을 때의 조건문이 계속 실행됩니다. 혹시 함수가 실행되었는지 확인할 수 있는 함수가 있을까요...? 아니면 다른 해결방안이 있을 까요? 이거에서 막혀서 새벽동안 계속 붙잡고 있는데도 안됩니다. 도와주세요....
아래는 코드입니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#pragma warning(disable:4996)
#define S_SIZE 50
typedef struct NODE {
int number;
int year;
int check;
char title[S_SIZE];
struct NODE* link;
}NODE;
void search_out(char title[S_SIZE]);
void search_in(char title[S_SIZE]);
void add(NODE** list);
void print_book();
void book();
void start();
int get_num();
NODE* create();
NODE* list = NULL;
int number = 0;
int temp = 0;
int main() {
NODE* prev, * p, * next;
char title[S_SIZE];
int year;
int temp = 0;
prev = NULL;
int check_counter = 0;
int choice = 8;
int c = 0;
printf("연결형 리스트를 이용한 도서관리 프로그램\n\n");
while (choice != 4)
{
c = 0;
start();
scanf("%d", &choice);
switch (choice)
{
case 0:
{
add(&list);
printf("\n");
break;
}
case 1:
{
if (number == 0)
{
printf("책이 없습니다.\n");
}
else
{
printf("대여할 책의 제목을 입력하시오:");
scanf("%s", title);
search_out(title);
printf("\n");
}
break;
}
case 2:
{
if (number == 0)
{
printf("책이 없습니다.\n");
}
else
{
printf("반납할 책의 제목을 입력하시오:");
scanf("%s", title);
search_in(title);
printf("\n");
}
break;
}
case 3:
{
if (number == 0)
{
printf("책이 없습니다.\n");
}
else
{
print_book();
printf("\n");
}
break;
}
case 4:
{
book();
printf("\n");
break;
}
default:
{
while (getchar() != '\n')
{
if (c == 0)
{
printf("잘못 입력하였습니다.\n");
}
c++;
}
break;
}
}
}
return 0;
}
void start()
{
printf("=====================\n");
printf("0. 신규 등록\n");
printf("1. 도서 대출\n");
printf("2. 도서 반납\n");
printf("3. 목록 출력\n");
printf("4. 종료\n");
printf("=====================\n");
}
NODE* create()
{
int year;
char title[S_SIZE];
NODE* p = (NODE*)malloc(sizeof(NODE));
NODE* q;
int j = 0;
printf("등록할 책의 제목을 입력하시오:");
scanf("%s", title);
for (q = list; q; q = q->link)
{
if (strcmp(q->title, title) == 0)
j++;
}
if (j != 0)
{
printf("이미 등록된 책입니다.\n");
return 0;
}
else
{
printf("책의 출판 연도를 입력하시오:");
scanf("%d", &year);
p->check = 0;
p->number = number;
strcpy(p->title, title);
p->year = year;
p->link = NULL;
number++;
printf("%s를 성공적으로 등록하였습니다.\n", title);
return p;
}
}
void add(NODE** list)
{
NODE* new = create();
if (*list == NULL)
{
*list = new;
}
else
{
NODE* p = *list;
while (p->link != NULL)
{
p = p->link;
}
p->link = new;
}
}
void search_out(char title[S_SIZE])
{
NODE* p;
int i = 0;
for (p = list; p; p = p->link)
{
if (strcmp(p->title, title) == 0)
{
i++;
if (i != 0 && p->check == 0)
{
printf("%s 를 대출에 성공하였습니다.\n", p->title);
p->check++;
}
else if (i != 0 && p->check == 1)
{
printf("%s 가 이미 대출중입니다.\n", p->title);
}
}
}
if (i == 0)
{
printf("%s 가 존재하지 않습니다.\n", title);
}
}
void search_in(char title[S_SIZE])
{
NODE* p;
int i = 0;
for (p = list; p; p = p->link)
{
if (strcmp(p->title, title) == 0)
{
i++;
if (i != 0 && p->check == 1)
{
printf("%s 반납에 성공하였습니다.\n", p->title);
p->check--;
}
else if (i != 0 && p->check == 0)
{
printf("%s 는 대출중인 책이 아닙니다.\n", p->title);
}
}
}
if (i == 0)
{
printf("%s 가 존재하지 않습니다.\n", title);
}
}
void print_book()
{
NODE* p = list;
while (p != NULL)
{
printf("순서 %d, 출판연도 %d, 대출여부 %d, 제목 %s,\n", p->number, p->year, p->check, p->title);
p = p->link;
}
}
void book()
{
NODE* p = list;
NODE* next;
while (p != NULL)
{
next = p->link;
free(p);
p = next;
}
printf("메모리를 모두 반납하였습니다.\n");
}