C언어에서 fgets함수에 대해 질문이 있습니다.
글쓴이: psh01312 / 작성시간: 금, 2018/07/13 - 1:13오후
fgets함수는 입력버퍼가 비워져있다면 특정한 입력 스트림을 통해 입력을 받아오고 입력버퍼에 특정한 문자가 남아있다면 그 문자를 받아오는 함수가 맞나요?
void ClearLineFromReadBuffer(void)
{
while(getchar()!='\n');
}
위와 같은 함수가 필요한 이유가 fgets함수가 엔터키를 받아오는 특성때문에 원치않게 입력버퍼에 엔터키가 남아있게 되거나 입력과정에서 사이즈를 넘어가는 문자열을 입력받아왔을때 입력버퍼를 비우기 위해 쓰는 함수가 맞나요?
그리고 그 원리가 getchar함수를 통해 입력버퍼에 남아있는 문자 하나하나 씩을 읽어들임으로써 입력버퍼를 비우는것인가요?
Forums:
man getchar man fgets
man getchar
man fgets
세벌 https://sebuls.blogspot.kr/
fgets 함수는 입력버퍼에서 '\n' 까지
fgets 함수는 입력버퍼에서 '\n' 까지 읽어오는 함수입니다.
중요한건 '\n' 도 포함이 되는 함수이죠.
'\n' 을 안읽어오는건 대표적으로 scanf입니다.
위에 적으신 함수 예제는
이런 상황에서 필요하죠
그이유는 number의 사이즈는 7 이다 보니 (문자열6자리 +'\0' )개행문자까지 읽어들일 공간이 없게됩니다.
그래서 입력버퍼에는 그대로 '\n' 이 남아있게되죠.
위의 소스 이후에 fgets 을 다시 한다면 남아있던 '\n'만 읽히게되고 코드가 꼬이는걸 방지하기 위해서 넣는 함수입니다.
댓글 달기