인프런 커뮤니티 질문&답변

김도겸님의 프로필 이미지
김도겸

작성한 질문수

홍정모의 따라하며 배우는 C언어

8.8 메뉴 만들기 예제

버퍼가 헷갈려요

해결된 질문

작성

·

176

0

int get_integer()
{
	int input;
	char c;

	while (scanf("%d", &input) != 1)
	{
		while ((c = getchar()) != '\n')
			putchar(c);
		printf(" is not an integer.\n Please try again : ");
	} 

	return input;
}

제가 맞게 이해한건지 모르겠는데

여기서 putchar(c)에 들어가는건 while (scanf("%d", &input) != 1)에서 scanf의 형식지정자가 맞지않아 뱉어낸 버퍼에 남아있던 값이 맞나요?

답변 1

1

결론적으로는 맞습니다.

우선 scanf는 형식 지정자에 맞게 (올바르게) 입력된 입력값의 수를 반환합니다

while(scanf("%d", &input) != 1)는 입력된 값이 하나로 올바르게 입력되었는지를 검사합니다.

그렇지 않다면 while ((c = getchar()) != '\n') 조건을 검사하고

입력된 값 (c) is not an integer.\n Please try again :

을 출력하는 겁니다.

 

 

김도겸님의 프로필 이미지
김도겸

작성한 질문수

질문하기