티스토리 뷰

Programming/C

C :: scanf 공백 입력받기

디빌리 2018. 7. 2. 09:56


scanf 의 parameter는 아래와 같이 3가지로 분류된다.

  • Whitespace charater
  • Non-whitespace character, except format specifier(%)
  • Format specifier

여기서 whitespace는 아래 중 하나를 말하며, EOT(End of Text)로 인식한다.

' '
(0x20)
space (SPC)
'\t'
(0x09)
horizontal tab (TAB)
'\n'
(0x0a)
newline (LF)
'\v'
(0x0b)
vertical tab (VT)
'\f'
(0x0c)
feed (FF)
'\r'
(0x0d)
carriage return (CR)

위 표에서도 나와있듯이 공백은 whitespace중 하나이기 때문에 데이터가 아닌 종료문자로 인식된다.

따라서 아래와 같은 코드에 공백이 포함된 문자열을 입력하는 경우, 공백 이전까지의 문자만 출력된다.

char arrInput[MAX_LENGTH] = { 0, };

printf("Please type any text : ");
scanf("%s", arrInput);
printf("%s", arrInput);

- input  : hello world! space test
- output : hello

공백을 단순 데이터로 입력받기 위해서는, 여러가지 방법이 있겠지만, format spacifier중 하나인 [^characters]를 통해 가능하다.

이는 negated scanset으로 해당 문자만 whitespace로 인식하게 된다.

따라서 아래와 같이 scanf에 parameter를 설정하면, 원하는대로 공백을 입력받을 수 있다.

char arrInput[MAX_LENGTH] = { 0, };

printf("Please type any text : ");
scanf("%[^\n]s", arrInput);
printf("%s", arrInput);

- input  : hello world! space test
- output : hello world! space test



참고

'Programming > C' 카테고리의 다른 글

C :: ASCII Table :: 아스키 코드 :: 아스키 코드표  (0) 2015.09.30
C :: 파일 입출력 :: File access mode  (0) 2013.03.25
C :: system 함수  (0) 2013.03.11
댓글