scanf()에서 공백 스킵하기

종종 문제에서 입력을 받을 때 공백을 무시해야 하는 경우가 있다.
숫자만 읽어들이는 경우 scanf("%d", &var)과 같이 처리할 수 있지만,
문자도 읽어야 하는 경우 공백 문자도 문자로 취급되어 귀찮아진다.

한 줄만 읽는 경우 iostream 혹은 string의 getline을 쓸 수 있지만,
그렇지 않은 경우 귀찮을 수 있다.

이 때 *를 사용하면 특정한 문자들을 skip할 수 있다.
공백, 줄바꿈, 탭 문자를 스킵하기 위해서는 다음과 같이 처리하면 된다.

1
scanf("%*[ \n\t]%c", &var);

[]는 해당 대괄호에 있는 문자들을 하나의 그룹으로 묶어,
그 그룹에 속한 문자를 골라내는 역할을 한다.
이 때 그룹의 문자가 몇 개 들어오든 상관없이 모두 뛰어넘는다.

예시 코드

1
2
3
4
5
6
7
8
#include <cstdio>

int main() {
char c;
scanf("%*[1 \n\t]%c", &c);
printf("> %c\n", c);
return 0;
}

실행 결과

1
2
3
4
> ./test.out
111111111
1 11112
> 2