36.3 문자열을 여러 개 입력받기

지금까지 문자열(단어) 하나만 입력받았습니다. 이번에는 공백으로 구분된 문자열 두 개를 입력받아보겠습니다.

  • scanf("%s %s ...", 배열1, 배열2, ...);
  • scanf("%s %s ...", 문자열포인터1, 문자열포인터2, ...);

scanf_two_string_array.c

#define _CRT_SECURE_NO_WARNINGS    // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>

int main()
{
    char s1[10];    // 크기가 10인 char형 배열을 선언
    char s2[10];    // 크기가 10인 char형 배열을 선언

    printf("문자열을 두 개 입력하세요: ");
    scanf("%s %s", s1, s2);    // 표준 입력에서 공백으로 구분된 문자열 두 개를 입력받음

    printf("%s\n", s1);    // s1의 내용을 출력
    printf("%s\n", s2);    // s2의 내용을 출력

    return 0;
}

소스를 컴파일하여 실행한 뒤 Helloworld를 입력하고 엔터 키를 누르세요.

실행 결과

문자열을 두 개 입력하세요: Hello world (입력)
Hello 
world

먼저 문자열 두 개를 저장하기 위한 공간을 선언합니다. 여기서는 s1, s2 배열을 선언했습니다(문자열 포인터에 메모리를 할당해도 됩니다).

이제 scanf("%s %s", s1, s2);와 같이 서식 지정자로 %s를 두 개 넣어줍니다. 그리고 %s에 해당하는 문자열이 저장될 배열을 두 개를 넣어주면 공백으로 구분된 문자열을 입력받을 수 있습니다. 여기서는 %s 사이를 공백으로 띄워주었지만 공백으로 띄우지 않아도 상관없습니다.

그림 36‑4 scanf로 문자열 여러 개 입력받기
 

문자열을 더 입력받고 싶다면 다음과 같이 %s와 입력받을 배열(또는 문자열 포인터)의 개수를 늘려줍니다.

char s1[10], s2[10], s3[10], s4[10], s5[10];

scanf("%s %s %s", s1, s2, s3);                  // 문자열 세 개 입력받기
scanf("%s %s %s %s", s1, s2, s3, s4);           // 문자열 네 개 입력받기
scanf("%s %s %s %s %s", s1, s2, s3, s4, s5);    // 문자열 다섯 개 입력받기

지금까지 입력 값을 문자열에 저장하는 방법을 배웠는데 문자열 리터럴이 할당된 포인터에는 쓰기가 안된다는 부분이 있었습니다. 이 부분은 운영체제에 관련된 내용이라 이해하지 않고 넘어가도 됩니다. 일단은 문자열 리터럴이 할당된 포인터는 변경할 수 없다는 점만 기억하세요.