"C언어 stdin 버퍼 비우기"의 두 판 사이의 차이

1번째 줄: 1번째 줄:
==개념==
==개념==
;C언어 stdin 버퍼 비우기
;C언어, stdin 버퍼 비우기
;C Language stdin buffer clear
;C Language, stdin buffer clearing


==예시==
==예시==

2017년 4월 19일 (수) 06:42 판

1 개념

C언어, stdin 버퍼 비우기
C Language, stdin buffer clearing

2 예시

  • 버퍼를 비우지 않을 시
#include <stdio.h>

int main()
{
	int a;
	char c;

	scanf("%d", &a);
	printf("%d\n", a);	

	scanf("%c", &c);
	printf("%c\n", c);

	return 0;
}
→ 사용자는 a 변수에 숫자를 받고 c 변수에 문자를 받으려 의도함. 하지만 사용자가 실제 프로그램을 실행하면 c 변수를 따로 입력 받기 전에 자동 종료됨. 원인은 숫자 이후 입력된 엔터키에 의해 개행문자('\n')가 발생하며 c 변수에 이 개행 문자가 저장됨
  • 버퍼를 비울 시
#include <stdio.h>

void clear_stdin();

int main()
{
	int a;
	char c;

	scanf("%d", &a);
	printf("%d\n", a);	
	clear_stdin();

	scanf("%c", &c);
	printf("%c\n", c);

	return 0;
}

void clear_stdin() 
{
	int ch;

	while ((ch = getchar()) != EOF && ch != '\n') {};
}
→ 버퍼 함수 stdin_clear()를 실행하면 stdin의 개행문자가 제거되어 정상 동작을 함.

3 fflush

  • 윈도우OS 에서는 fflush 함수를 이용해 stdin 의 버퍼를 비워줌. 다만 이는 표준에 포함되어 있지 않으며 gcc 컴파일러에서는 동작 자체를 하지 않는다. 따라서 위 예시와 같이 별도로 함수를 만들어 사용 하였음

4 같이 보기

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}