目次
1. scanf
함수란?
C 언어를 배우는 데 있어, 프로그램에 데이터를 입력하는 방법으로 자주 사용되는 것이 scanf
함수입니다. 이는 사용자가 입력한 데이터를 지정된 변수에 저장해 주는, 프로그램에 대한 「청취자」와 같은 존재입니다.scanf
의 기본 구문
scanf("포맷 지정자", &변수);
여기서 중요한 것은 「포맷 지정자」와 「변수 앞에 붙이는&
」입니다. 포맷 지정자는 입력되는 데이터의 종류를 지정하고, &
는 그 변수의 주소를 지정합니다. 이 간단한 규칙을 지키면, scanf
는 프로그램 안에서 사용자의 입력을 처리할 수 있습니다. 예를 들어, 정수를 읽어들이는 경우는 다음과 같습니다:int num;
scanf("%d", &num);
이처럼, 프로그램에 입력을 제공하고 그 데이터를 사용할 수 있는 상태로 만들어 줍니다. 바로 scanf
는 C 언어의 데이터 입력에 신뢰할 수 있는 동반자입니다.2. 자주 사용되는 포맷 지정자
scanf
의 편리함은 다양한 데이터 타입을 다룰 수 있다는 점에 있습니다。포맷 지정자를 통해 프로그램에 어떤 데이터 타입이 입력되는지 알려 주는 것입니다。그럼, 자주 사용되는 포맷 지정자를 살펴보겠습니다。주요 포맷 지정자
%d
: 정수용。%f
:float
형의 부동소수점 수용。%lf
:double
형의 배정밀도 부동소수점 수용。%s
: 문자열용(단, 공백은 인식하지 않습니다)。%c
: 단일 문자용。
double
형으로 다루는 경우는 다음과 같이 기술합니다:double val;
scanf("%lf", &val);
이 경우, %lf
가 배정밀도 부동소수점 수용 지정자임을 기억해 두세요。이와 같이 포맷 지정자를 구분해서 사용함으로써, scanf
는 다양한 데이터를 처리할 수 있습니다。3. 여러 입력을 동시에 처리하기
때때로, 사용자로부터 여러 입력을 한 번에 처리하고 싶을 때가 있습니다. 예를 들어, 나이와 키를 동시에 입력하는 경우입니다. 그런 경우에도,scanf
는 여러 포맷 지정자를 사용함으로써 한 번에 처리할 수 있습니다.int age;
float height;
scanf("%d %f", &age, &height);
이렇게 하면, 나이(정수)와 키(부동소수점)를 한 번에 읽어올 수 있습니다.
프로그램에 그것을 표시하려면 아래와 같이 작성할 수 있습니다:printf("나이: %d, 키: %.2f", age, height);
이렇게 하면, 입력된 값을 쉽게 표시할 수 있습니다. 여러 입력이 순식간에 해결됩니다!
4. 입력 검증 및 오류 처리
사용자가 항상 올바른 데이터를 입력한다는 보장은 없습니다. “잘못된 나이”라든가 “음수는 허용되지 않음”과 같은 상황을 가정해야 합니다. 그런 경우에 유용한 것이 검증과 오류 처리입니다.scanf
의 반환값으로 오류 검사
scanf
은 입력된 데이터의 개수를 반환하므로, 이를 사용해 입력이 올바른지 확인할 수 있습니다. 아래 예에서는 나이가 0~120세 범위 내인지 확인합니다:int age;
printf("나이를 입력해주세요(0~120): ");
if (scanf("%d", &age) == 1 && age >= 0 && age <= 120) {
printf("입력된 나이는 %d 살입니다.
", age);
} else {
printf("잘못된 나이입니다.
");
}
이 코드에서는 scanf
의 반환값을 사용하여 올바른 형식의 입력이 이루어졌는지, 또한 나이가 적절한 범위 내에 있는지를 확인합니다. 이를 통해 잘못된 입력을 방지하고, 보다 견고한 프로그램을 만들 수 있습니다.5. 입력 스트림 정리
scanf
를 사용하고 있으면, “어? 이전 입력이 남아 있나요?” 같은 상황이 발생할 수 있습니다. 이는 입력 스트림에 아직 데이터가 남아 있기 때문입니다. 예를 들어, Enter
키를 눌렀을 때의 개행 문자( )가 남아 있는 것이 원인입니다. 입력 스트림을 정리하기 위해서는, 아래 코드를 사용합니다:scanf("%*[^
]");
scanf("%*c");
이를 통해 입력 스트림을 깨끗이 정리하고, 다음 입력 처리에 영향을 주지 않으며 진행할 수 있습니다. 이를 습관화하면, 예상치 못한 버그에 시달리는 경우가 줄어듭니다.6. 흔히 발생하는 함정과 베스트 프랙티스
scanf
를 사용하기 시작한 초기에 흔히 저지르는 실수가 몇 가지 있습니다. 예를 들어, %d
대신 %s
를 사용하거나, 변수 앞에 &
를 붙이는 것을 잊는 경우 등이 있습니다… 이들은 바로 오류로 이어지기 쉽지만, 주의하면 피할 수 있습니다.베스트 프랙티스
- 포맷 지정자의 일치:
%d
에는int
형,%f
에는float
형 등, 올바른 포맷 지정자를 사용하는 것. - 문자열 길이에 주의: 긴 문자열 입력은 버퍼 오버플로를 방지하기 위해 주의가 필요합니다.
- 스트림 정리: 앞서 언급한 바와 같이, 입력 스트림을 항상 깨끗하게 유지하는 것.
7. 응용편|scanf
의 고급 사용법
마지막으로, 약간 응용적인 scanf
사용법을 소개합니다. 예를 들어, 여러 변수에 입력을 한 번에 수행하고 싶을 때나, 문자열을 배열에 입력하는 경우입니다.문자열 입력
char name[20];
printf("이름을 입력하세요: ");
scanf("%s", name);
printf("안녕하세요, %s님!", name);
이 코드에서는 사용자의 이름을 입력받아 인사하는 간단한 프로그램을 만들고 있습니다. 입력된 이름이 배열 name
에 저장되고, %s
지정자로 그것을 표시합니다.요약
C 언어에서scanf
는 매우 강력하며, 올바르게 사용하면 다양한 형태의 데이터 입력을 처리할 수 있습니다. 이 가이드를 참고하여, 꼭 자신의 프로그램에서도 scanf
를 능숙하게 사용 보세요. 중요한 것은 적절한 포맷 지정자를 사용하고, 입력 오류에 대응하며, 입력 스트림을 정리하는 것입니다. 이 기본을 잡으면, scanf
는 여러분의 프로그래밍 실력을 위한 강력한 무기가 될 것입니다!