Programming/C Basic

10.C 언어 Tip - scanf 공백 입력받기

양디 2016. 2. 3. 21:19




Scanf 공백 ?


왜 이런 포스팅을 올리냐면, 일반적인 scanf의 %s로는 공백을 입력받을 수 없습니다.


띄어쓰기를 입력하면, 거기에서 문자열을 그만 받게 됩니다.


1
2
3
4
5
6
7
8
#include <stdio.h>
#include <stdlib.h>
 
void main() {
    char str[20];
    scanf("%s", str);
    printf("%s", str);
}
cs


간단하게 위와 같은 함수를 사용해봅시다.


아, %s는 문자열을 받는 것이고, 문자열이란 char의 배열입니다.


따라서 한 글자가 아닌 단어단위의 표현이 가능하게 되는거죠.


위 코드를 실행해봅시다.






위의 사진처럼 띄어쓰기 없는 글은 다 입력을 받지만, 띄어쓰기 즉 공백이 있으면 그자리에서 입력을 멈춥니다.


이를 해결하기 위해서 scanf의 %s를 조작할 필요가 있습니다.


%[]


위의 신기한 모양의 키워드가 보이시나요 ?


%[] 은 입력 받을 패턴에 대한 이야기입니다.


1
2
3
4
5
6
7
8
#include <stdio.h>
#include <stdlib.h>
 
void main() {
    char str[20];
    scanf(" %[123]", str);
    printf("%s", str);
}
cs


위의 코드처럼 %[123] 을 입력하면, 123이 아닌 문자가 입력되는 곳에서 입력받는 것을 종료합니다.


위의 코드에서 1123456을 입력하면, 어떻게 될까요?



뒤의 4를 만나게 되면 입력받는 것을 종료합니다.


%[123] 은 %[1-3]과 동일합니다.


%[a-z] 라고 하면 영어 알파벳 소문자만 입력받습니다.


이를 응용해서 문자열을 받되, 공백도 입력받으려면 다음과 같이 하시면 됩니다.


%[^\n]


위의 뜻은, \n 즉 엔터를 제외한 모든 문자열을 받는다 ! 라는 뜻입니다.


따라서 위의 코드로 실행해보면,




띄어쓰기도 정상적으로 입력받는걸 볼 수 있습니다 !




댓글