CS/C++

scanf 사용시 버퍼에 남은 linefeed 처리

PIYA 2022. 7. 14.

scanf 사용시 버퍼에 남은 linefeed 처리

3
a

위와 같은 인풋을 아래의 scanf로 받는다고 하자.

scanf("%d", &num);
scanf("%c", &ch);

결과는 str에 a 캐릭터가 들어가지 않고 빈 문자열이 들어간다.
scanf가 3을 받고나서 버퍼에 \n가 남아있는 상태가 되고,
두번째 scanf가 \n을 받고 끝내버리기 때문이다.
이를 방지하기 위해서는 캐릭터를 입력받는 scanf의 포맷스트링 앞에 ' ' 공백을 추가해주면 된다.
scanf(" %c", &ch);

버퍼 앞의 공백, \n, \t가 모두 무시된다.

댓글