본문 바로가기
프로그래밍언어/C 언어

[C 언어] scanf 함수를 사용한 문자열 입력

by khsnote22 2022. 12. 9.

문자열 상수는 값을 바꿀 수 없으므로 바꿀 수 있는 문자열을 원한다면 char 배열을 사용해야 합니다. 배열에 문자열을 입력하는 방법은 다양한데, 일단 scanf 함수를 사용해보겠습니다.

 

scanf 함수는 %s를 사용하여 공백이 없는 연속된 문자들을 입력받습니다. 간단한 예제를 통해 scanf 함수가 문자열을 입력하는 과정과 특징을 살펴보겠습니다.

 

// scanf 함수를 사용한 문자열 입력

int main(void)
{
	char str[80];
    
    printf("문자열 입력 : ");
    scanf("%s", str); // %s를 사용하고 배열명을 준다.
    printf("첫 번째 단어 : %s\n", str); // 배열에 입력된 문자열 출력
    scanf("%s", str);
    printf("버퍼에 남아 있는 두 번째 단어 : %s\n", str);
    
    return 0;
}

scanf 함수는 버퍼를 사용하므로 키보드로 입력한 문자열은 Enter를 누를 때 버퍼에 저장됩니다. 그 후에 scanf 함수는 버퍼에서 문자열을 가져와 배열에 저장하는데 중간에 공백 문자, 탭 문자, 개행 문자가 있으면 그 이전까지만 저장합니다. 

 

실행결과와 같이 공백 문자를 포함해 apple jam이라고 입력한 경우를 예로 설명하겠습니다. 8행에서 최초 입력받은 apple jam에서 공백 문자 이전까지만 저장하므로 9행에서 apple만 출력합니다. 물론 배열에 저장한 문자열의 끝에는 널 문자를 붙여서 문자열을 완성합니다.

 

나머지 문자열 jam은 어떻게 될까요? 여전히 jam은 버퍼에 남아 있으며 다음에 호출되는 함수가 입력에 사용합니다. 코드로 다시 돌아가 보겠습니다.

 

10행에서 scanf 함수를 또 호출했습니다. 버퍼에 문자열이 남아 있으므로 키보드로부터 문자열을 새로 입력받지 않고 버퍼에 남아 있는 문자열을 가져와 배열에 저장합니다. 이때 중간에 있는 공백 문자나 탭 문자, 개행 문자는 모두 걸래내므로 다음 단어인 jam을 입력합니다. 따라서 str 배열에 jam이 입력되고 끝에 널 문자가 추가됩니다.