Menu
Coddy logo textTech

scanf를 이용한 문자열 입력

Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 14번째.

이제 널 종료 문자(null terminator)와 함께 문자열이 어떻게 작동하는지 이해했으므로, 사용자로부터 문자열 입력을 받는 방법을 배울 차례입니다. scanf 함수는 %s 형식 지정자를 사용하여 문자열을 읽을 수 있지만, 이해해야 할 중요한 제한 사항이 있습니다.

scanf로 문자열을 읽으려면, %s 형식을 사용하고 문자 배열의 이름을 전달합니다 (배열 이름은 이미 주소이므로 & 연산자 없이):

char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);

하지만 scanf("%s", ...)에는 치명적인 한계가 있습니다. 공백 문자(공백, 탭 또는 줄바꿈)를 만나는 즉시 읽기를 중단한다는 점입니다. 즉, 사용자가 "Hello World"를 입력하면 scanf는 "Hello"만 캡처하고 "World"는 입력 버퍼에 남겨둡니다.

또 다른 심각한 문제는 scanf가 입력이 배열의 크기에 맞는지 확인하지 않는다는 점입니다. 만약 누군가가 배열이 수용할 수 있는 것보다 더 긴 단어를 입력하면, 버퍼 오버플로우(buffer overflow)가 발생하여 잠재적으로 프로그램이 중단되거나 보안 취약점이 발생할 수 있습니다. 항상 문자 배열이 예상되는 입력을 충분히 담을 수 있을 만큼 큰지 확인하십시오.

이러한 제한 사항에도 불구하고, scanf("%s", ...)는 단일 단어를 읽는 데 매우 적합하며, 이는 곧 진행할 챌린지에서 연습하게 될 내용입니다.

challenge icon

챌린지

쉬움

scanf를 사용하여 사용자로부터 문자열 입력을 받고 이를 다시 표시하는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:

  1. 사용자의 입력을 저장하기 위해 30개의 요소를 가진 username이라는 이름의 문자 배열을 선언합니다.
  2. 또 다른 입력을 저장하기 위해 25개의 요소를 가진 hobby라는 이름의 문자 배열을 선언합니다.
  3. printf를 사용하여 사용자에게 "Enter your username:"이라는 메시지를 출력합니다.
  4. %s 형식 지정자와 함께 scanf를 사용하여 username 배열에 사용자 이름을 읽어옵니다.
  5. printf를 사용하여 사용자에게 "Enter your hobby:"라는 메시지를 출력합니다.
  6. %s 형식 지정자와 함께 scanf를 사용하여 hobby 배열에 취미를 읽어옵니다.
  7. 아래에 표시된 정확한 형식으로 printf를 사용하여 두 문자열을 출력합니다.

입력은 두 개의 별개 단어로 제공됩니다 (각 단어 내에 공백은 없습니다).

출력은 다음과 같은 형식으로 표시되어야 합니다:

Enter your username:
Enter your hobby:
Hello [username], your hobby is [hobby]!

예를 들어, 사용자가 사용자 이름으로 "Alice"를 입력하고 취미로 "reading"을 입력하면 출력은 다음과 같아야 합니다:

Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!

이 챌린지는 %s 형식 지정자와 함께 scanf를 사용하여 문자열 입력을 읽는 방법, 충분한 크기의 적절한 문자 배열 선언, 그리고 printf를 사용하여 사용자 입력과 형식화된 출력을 결합하는 방법에 대한 이해도를 테스트합니다.

직접 해보기

#include <stdio.h>

int main() {
    // TODO: 여기에 문자 배열을 선언하세요
    
    // TODO: 여기에 입력을 요청하고 읽는 코드를 작성하세요
    
    // TODO: 최종 출력 메시지를 인쇄하세요
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨