반응형
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 즉 엔터를 제외한 모든 문자열을 받는다 ! 라는 뜻입니다.
따라서 위의 코드로 실행해보면,
띄어쓰기도 정상적으로 입력받는걸 볼 수 있습니다 !
반응형
댓글