기본 패턴
c
int age;
if (scanf("%d", &age) != 1) {
return 1;
}설명
scanf는 읽은 항목 수를 반환하므로, 성공 여부를 반드시 확인하는 습관이 중요합니다.%d,%lf,%c,%s처럼 서식 지정자마다 기대하는 인자 타입이 다릅니다.- 숫자 입력 뒤에는 개행 문자가 입력 버퍼에 남을 수 있어서, 다음
%c읽기에서 예상과 다른 결과가 나올 수 있습니다. - 공백을 포함한 줄 입력이 중요하면
scanf보다fgets와 파싱 조합이 더 안정적인 경우가 많습니다.
짧은 예제
c
#include <stdio.h>
int main(void) {
int age;
char grade;
if (scanf("%d", &age) != 1) {
return 1;
}
if (scanf(" %c", &grade) != 1) {
return 1;
}
printf("age=%d, grade=%c\n", age, grade);
return 0;
}빠른 정리
| 항목 | 설명 |
|---|---|
| 반환값 검사 | 원하는 개수만큼 읽었는지 확인해야 함 |
%d / %lf / %c | 정수 / 실수 / 문자 입력 |
" %c" | 앞 공백으로 남아 있던 개행과 공백을 건너뜀 |
| 입력 버퍼 | 이전 입력의 개행이 다음 읽기에 영향을 줄 수 있음 |
| 대안 | 복잡한 입력은 fgets 후 파싱이 더 안전할 수 있음 |
주의할 점
%s는 공백에서 끊기고, 길이 제한을 주지 않으면 버퍼를 넘칠 수 있습니다. 문자열 입력은 폭 제한이나 fgets를 우선 고려해야 합니다.