Language

[ C ] scanf 공백 및 원하는 형태 입력받기

궁금한게 많은 개발자 2020. 10. 30. 22:00

scanf를 사용하다 보면 공백이나 개행문자를 입력하게 되면 그 문자를 입력하기 전까지만 버퍼에 저장되게 된다.
물론 gets함수를 사용할 수 있겠지만 scanf는 원하는 format을 지정할 수 있으므로 좀 더 유연하다고 생각된다.

 

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	char buf[20];
    scanf("%s", buf);			// 공백, 개행문자가 들어오기 전까지 저장
    scanf("%[123], buf);		// 123이외의 문자가 들어오기 전까지 저장
    scanf("%[^\n], buf);		// 개행문자 이외의 것만 받으며, 개행문자가 들어오기 전까지 저장
	return 0;
}

 

위의 코드처럼 %[]의 대괄호 안에 받고 싶은 정규표현식을 넣으면 그에 해당하는 문자들만 저장할 수 있다.
정규표현식으로 생각보다 다양한 케이스들을 분리하여 원하는 것들만 받을 수 있으므로 유용하다.
굳이 이런 기능이 필요할까 싶지만, 뭔가 이런 특수한 케이스가 꽤나 많이 생겨 기록해두려 한다.