C언어를 공부하는 과정에서 가장 먼저 접하게 되는 함수 중 하나는 출력 함수인 printf()입니다. 그 다음으로 많이 사용되는 함수가 바로 입력 함수인 scanf()입니다. 이 함수는 사용자가 키보드를 통해 입력한 데이터를 프로그램 내의 변수에 저장하는 역할을 합니다. 이번 포스트에서는 scanf() 함수의 사용법 및 주의할 점에 대해 자세히 알아보겠습니다.

scanf() 함수의 기본 사용법
scanf() 함수는 사용자가 입력한 데이터를 가져오기 위해 설계된 함수로, 기본 형식은 다음과 같습니다.
scanf("서식", &변수);
여기에서 “서식” 부분은 입력받을 데이터의 형식을 지정하며, 변수는 입력받은 데이터가 저장될 메모리의 주소를 가리키기 위해 &를 붙여야 합니다. 예를 들어, 정수를 입력받기 위한 간단한 코드는 다음과 같습니다.
#include <stdio.h>
int main(void) {
int number;
printf("정수를 입력해 주세요: ");
scanf("%d", &number);
printf("입력한 정수는 %d입니다.\n", number);
return 0;
}
여러 데이터 입력받기
scanf() 함수는 한 번에 여러 개의 값을 입력받을 수도 있습니다. 이 경우 서식을 통해 각 데이터 타입에 맞는 변수를 지정해야 합니다. 각 변수가 구분되는 방식은 공백, 줄 바꿈, 탭 등이 있습니다. 다음 예시는 두 개의 정수를 한 번에 입력받는 방법입니다.
#include <stdio.h>
int main(void) {
int num1, num2;
printf("두 개의 정수를 입력해 주세요 (예: 12 34): ");
scanf("%d %d", &num1, &num2);
printf("입력한 정수는 %d와 %d입니다.\n", num1, num2);
return 0;
}
서식 지정자
scanf()를 사용할 때 사용하는 서식 지정자는 다음과 같습니다.
- %d: 정수형
- %f: 실수형
- %lf: double형 실수
- %s: 문자열
- %c: 문자
각 서식 지정자는 입력받는 데이터의 타입에 따라 맞춰 사용되어야 하며, 잘못된 타입의 데이터를 입력하면 프로그램이 비정상적으로 동작할 수 있습니다. 예를 들어, %d로 정수를 입력받을 때 문자를 입력하면 오류가 발생합니다.
문자열 입력과 주의사항
문자열을 입력받을 때 scanf()를 사용하면, 공백을 기준으로 문자열을 나누기 때문에 한 단어만 읽을 수 있다는 점에 주의해야 합니다. 예를 들어, “Hello World”를 입력하면 “Hello”만 읽혀집니다.
#include <stdio.h>
int main(void) {
char name[100];
printf("이름을 입력해 주세요: ");
scanf("%s", name);
printf("입력한 이름은 %s입니다.\n", name);
return 0;
}
그 결과 “이름을 입력해 주세요: John Doe” 라고 입력하면 “입력한 이름은 John입니다.”라고 출력됩니다. 여러 단어를 입력받고 싶다면, fgets() 함수나 gets() 함수를 사용하는 것이 좋습니다. 그러나 gets() 함수는 보안 문제로 인해 사용이 권장되지 않으므로 fgets()를 사용하는 것이 바람직합니다.
fgets() 함수의 활용
fgets() 함수는 여러 단어를 포함한 문자열을 안전하게 읽어들일 수 있습니다. 사용법은 다음과 같습니다.
#include <stdio.h>
int main(void) {
char input[100];
printf("문장을 입력해 주세요: ");
fgets(input, sizeof(input), stdin);
printf("입력한 문장은: %s", input);
return 0;
}
이 코드에서는 사용자가 “Hello World”라고 입력했을 때, “입력한 문장은: Hello World”라고 출력되는 것을 확인할 수 있습니다.
scanf_s() 함수의 소개
만약 Visual Studio 같은 환경에서 개발할 경우, 보안상의 이유로 scanf() 대신 scanf_s()를 사용하는 것이 좋습니다. scanf_s()는 입력 버퍼의 크기를 추가로 인자로 받아서 버퍼 오버플로우를 방지하는 역할을 합니다. 사용법은 다음과 같습니다.
#include <stdio.h>
int main(void) {
char name[20];
printf("이름을 입력해 주세요: ");
scanf_s("%s", name, (unsigned)_countof(name));
printf("입력한 이름은 %s입니다.\n", name);
return 0;
}

입력 시 주의할 점
scanf()와 scanf_s()를 사용할 때, 몇 가지 유의해야 할 사항이 있습니다. 입력 데이터의 형식을 맞춰야 하며, 올바르지 않은 형식이 입력되면 예기치 않은 결과를 초래할 수 있습니다. 또한, 문자열 입력 시에는 각 변수에 대한 버퍼 크기를 반드시 지정해야 합니다.
정리
이번 포스트에서는 C언어의 scanf() 함수에 대한 기본적인 사용법과 주의사항, 또한 여러 개의 데이터를 입력받는 방법에 대해 살펴보았습니다. 다양한 상황에서 유용하게 사용될 수 있는 scanf() 함수와 그 변형인 scanf_s() 함수에 대한 이해는 프로그래밍을 할 때 큰 도움이 될 것입니다. 앞으로의 C언어 학습에 많은 도움이 되기를 바랍니다.
자주 물으시는 질문
scanf() 함수의 기본적인 사용법은 무엇인가요?
scanf() 함수는 사용자로부터 입력값을 받아 변수에 저장하는 기능을 제공합니다. 일반적으로 사용되는 형식은 “scanf(“서식”, &변수);”이며, 여기서 서식은 입력 받을 데이터의 타입을 지정합니다.
문자열 입력 시 주의할 점은 무엇인가요?
scanf()를 이용해 문자열을 입력받을 때는 공백이 있는 경우 첫 번째 단어만 읽힐 수 있습니다. 여러 단어를 포함하는 문자열을 입력하려면 fgets()와 같은 다른 함수를 사용하는 것이 좋습니다.