반응형

C 언어 scanf 함수에서 공백 포함된 문장 입력받기

 

글. 수알치 오상문 

 

scanf 함수의 %s 서식 입력 방식은 화이트스페이스(빈칸, 탭, 엔터)가 있으면 입력을 종료합니다.

그래서 I love you. 같은 문장을 입력하면 중간에 끊어져버립니다.

 

이런 경우에는 %[ ] 서식을 입력합니다. 이 서식은 크게 두가지 형태로 사용합니다.

포함해야할 문자와 포함하면 안되는(즉, 종료에 사용할) 문자...

 

[ ] 안에 포함하고 싶은 문자들을 적습니다.

만약, 제외하고 싶은 문자들(종료 문자)을 적고 싶으면 '^' 문자로 시작하면 됩니다.

 

(1) 0123456789로 이루어진 문자열을 입력받고 싶을 때

    %[0123456789]

    %[0-9]

    %[9-0]

 

(2) 스페이스(빈칸)도 입력받고 싶을 때(탭, 쉼표, 엔터 키로 종료함)  

    %[^,\t\n]  

 

(3) 스페이스(빈칸)와 쉼표(,)도 입력받고 싶을 때(탭이나 엔터 키로 종료함)  

    %[^\t\n]  

 

[참고] 문자열 정규식 (String Regular Expression)

소개한 scanf 입력 기능은 정규식과 관련된 것입니다.

정규식 표현법은 다른 언어에서도 사용되므로 궁금하신 분은 정규식을 검색해서 공부하세요.

 

 

[예제]

#include <stdio.h>
#include <string.h>

 

int main( )
{
  char pw[100];


  printf("Enter your password: ");
  scanf("%[^,\t\n]", pw);  // 쉼표, 탭, 엔터를 만나면 종료

 

  // scanf("%[^\n,]", pw);  // 엔터, 쉼표를 만나면 종료 
  // gets(pw);  // fgets(pw, sizeof(pw), stdin);
 
  if(strcmp(pw, "I like you!") == 0)
    printf("로그인합니다.\n");
  else 
    printf("로그인 실패!\n");
  
  return 0;
}

 

 

 

 

반응형

+ Recent posts