C입출력과 파일

scanf와 입력 버퍼

`scanf`의 반환값 검사, 공백 처리, 버퍼 남김 문제를 중심으로 입력 처리 핵심을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

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를 우선 고려해야 합니다.