프로그래밍 공부/C 공부
[C] scanf 함수 2
alchang
2021. 1. 7. 22:38
scanf 함수의 입력형식 키워드에 어긋나는 자료형을 입력하면 컴파일중에는 문제가 없지만 출력과정에서 문제가 발생한다고 했었다. 다음의 코드가 좋은 예시가 된다.
#include <stdio.h>
void main()
{
int num = 0;
while (1) {
printf("input age : ");
scanf_s("%d", &num); //만약 %d형 자료에 정수가 아니라 문자를 입력했다면?
if (num > 0 && num < 130) break;
else printf("incorrect age!\n");
}
printf("your age is %d", num);
}
만약 사용자가 num에 정수형 데이터를 입력한다면 오류가 없지만, 만약 문자나 문자열을 입력한다면 어떻게 될까?
(1) 예를 들어 abc를 입력했다고 하면 오류이기 때문에 입력버퍼에는 abc[Enter]를 그대로 두고 오류 값 0 을 반환한다.
(2) num값이 0이 되는것이고 if조건에 의해 incorrect age를 출력하게된다.
(3) 무한 loop에 걸려있는 while문이 종료되지 않았기 때문에 scanf_s가 다시 실행된다.
(4) 입력버퍼에 있는 값이 abc[Enter] 이기 때문에 같은 같은 오류가 또 발생하여 num 은 0이 된다.
(5) 같은 과정이 무한히 반복되어 incorrect age가 무한히 출력된다.
이러한 문제를 해결하기 위해서는 rewind로 버퍼를 초기화 시켜주면 된다.
아래 코드는 if문이 많아져서 보기가 좀 별로일지라도 위와 같은 오류가 발생하지는 않는다.
#include <stdio.h>
void main()
{
int num = 0;
while (1) {
printf("input age : ");
if (scanf_s("%d", &num) == 0)
{
rewind(stdin);
printf("Enter digit number! \n");
}
else
{
if (num > 0 && num < 130)
{ break;}
else
{printf("incorrect age!\n"); }
}
}
printf("your age is %d", num);
}