본문 바로가기

etc.

[C code] 입력버퍼 비우기

반응형

scanf(), fgets(,,) 함수로 여러 문자열을 입력받다보면,

중간에 엔터키(\n)가 입력버퍼에 남아 입력하지도 않고도 입력이 되는 상황이 나타난다

(다음 함수 호출 시에 버퍼에 남아있는 '\n'가 입력됨)

fgets(char * s, int n, FILE * stream) 함수같은 경우에는,

n값 안에 '\0'값도 포함되어 실제적으로 n-1개의 문자를 입력받을 수 있는데,

이를 넘어서 입력하게 되면 엔터키(\n)가 저절로 입력버퍼에 남게 된다

이를 해결하기 위해서는,

입력함수 후에

 

void ClearLineFromReadBuffer(void)
{
    while(getchar() != '\n');
}

 

ClearLineFromReadBuffer() 함수를 호출하는 것 !


물론 이 이외에도

1. 간단하게는 getchar(); 를 추가

2. fflush(stdin); 추가

그런데 이건 gcc에서 안돌아감

3. rewind(stdio); 추가

rewind함수는 매개변수로 들어온 스트림을 초기화하는데 사용

4. fgets(string, sizeof(string), stdin);

다음 줄에

string[strlen(string)-1] = '\0'; 로 강제로 널문자를 넣어줌

5. scanf("%*c", c);

%*c는 입력은 받지만 저장은 안 함, 즉 비어있는 \n를 날림

6. scanf("%c", &c);를 scanf(" %c", &c); 로

%c 앞에 공백을 추가하면 white space를 구분자로 인식

등 방법은 많음

반응형