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가 모두 무시된다.

    댓글