Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 스캔셋(Scanset) 완벽 가이드 – scanf 입력 제어의 모든 것

스캔셋(Scanset)이란?

C 언어의 스캔셋(scanset)은 scanf 계열 함수에서 지원하는 특수한 형식 지정자입니다. %[] 형태로 표현되며, 대괄호 안에는 하나의 문자 또는 여러 개의 문자 집합을 지정할 수 있습니다. 단, 대소문자는 엄격하게 구분됩니다.

스캔셋이 적용되면 scanf() 함수는 대괄호 안에 명시된 문자들만 읽어들이고, 나머지 문자는 모두 무시합니다.

기본 예제

#include<stdio.h>
int main() {
    char str[50];
    printf("Enter something: ");
    scanf("%[A-Z]s", str);
    printf("Given String: %s", str);
}

실행 결과

Enter something: HElloWorld
Given String: HE

위 예제에서 스캔셋은 대문자 A~Z만 허용하므로, 소문자로 입력된 문자들은 모두 무시됩니다. 'W' 역시 그 앞에 소문자가 먼저 등장했기 때문에 읽히지 않습니다.

캐럿(^) 기호로 읽기 중단점 설정하기

스캔셋의 첫 번째 위치에 캐럿(^) 기호를 넣으면 동작 방식이 반전됩니다. 즉, 지정한 문자가 처음 나타나는 시점에서 scanf()가 더 이상 읽지 않고 종료합니다.

예제

#include<stdio.h>
int main() {
    char str[50];
    printf("Enter something: ");
    scanf("%[^r]s", str);
    printf("Given String: %s", str);
}

실행 결과

Enter something: HelloWorld
Given String: HelloWo

위 코드에서 scanf()는 'r' 문자를 만나는 순간 그 이후의 문자들을 모두 무시하고 입력을 마칩니다.

공백이 포함된 문자열 입력받기

이 기능을 활용하면 scanf()가 공백이 포함된 문자열을 제대로 입력받지 못하는 고질적인 문제를 해결할 수 있습니다. 스캔셋을 %[^\n]으로 지정하면 개행(newline) 문자를 만날 때까지 한 줄 전체의 문자를 모두 읽어들입니다.

예제

#include<stdio.h>
int main() {
    char str[50];
    printf("Enter something: ");
    scanf("%[^\n]s", str);
    printf("Given String: %s", str);
}

실행 결과

Enter something: Hello World. This line has some spaces.
Given String: Hello World. This line has some spaces.

이처럼 스캔셋을 잘 활용하면 scanf() 함수의 입력 처리 범위를 유연하게 제어할 수 있습니다. 대문자만 필터링하거나, 특정 문자 앞까지만 읽거나, 공백을 포함한 한 줄 전체를 입력받는 등 다양한 상황에 맞게 응용해 보세요.