C언어 입력 함수 - scanf, getchar, gets

코딩C언어
읽는데 5분 소요
처음 쓰여진 날: 2026-03-14
마지막 수정일: 2026-03-14
조회수: 1

요약

C언어의 입력 함수 scanf, getchar, gets의 사용법과 차이점을 알아봅니다. scanf에서 주소 연산자(&)를 사용하는 이유와 서식 지정자를 정보처리기사 실기 대비 핵심 내용으로 정리합니다.

입력 함수 핵심 정리

함수설명사용법입력
scanf(fmt, ...)서식 지정하여 입력scanf("%d", &a);정수, 실수, 문자 등
getchar()문자 한 개 입력ch = getchar();문자 1개
gets(str)문자열 입력 (줄 단위)gets(name);공백 포함 문자열

세 함수 모두 stdio.h 헤더에 선언되어 있으므로 #include <stdio.h>가 필요합니다.

함수 이름의 의미

C 표준 라이브러리에서는 입력 함수에 get(가져오다), 출력 함수에 put(내보내다)을 관례적으로 사용합니다.

함수이름 유래의미
scanfscan + formatted서식을 지정하여 입력
getcharget + character문자 하나를 입력
getsget + string문자열을 입력

scanf() - 서식 지정 입력

scanf()서식 지정자를 사용하여 키보드에서 데이터를 입력받는 함수입니다. C언어에서 가장 많이 사용하는 입력 함수입니다.

c
코드 하이라이팅 중...

scanf의 서식 지정자

출력 함수 printf와 같은 서식 지정자를 사용합니다.

서식 지정자의미입력 예시
%d정수 (10진수)scanf("%d", &n);
%c문자 한 개scanf("%c", &ch);
%s문자열scanf("%s", str);
%f실수 (소수점)scanf("%f", &x);
%lfdouble형 실수scanf("%lf", &y);

scanf에서 &를 붙이는 이유

scanf의 두 번째 인자부터는 변수 앞에 &(주소 연산자)를 붙여야 합니다.

c
코드 하이라이팅 중...

scanf는 키보드에서 입력받은 값을 변수에 직접 저장해야 합니다. 그런데 C언어에서 함수에 변수를 그대로 전달하면 값의 복사본만 전달되기 때문에, 원본 변수의 값을 바꿀 수 없습니다.

그래서 scanf에는 변수의 주소를 전달합니다. 주소를 알면 해당 메모리 위치에 직접 값을 쓸 수 있기 때문입니다.

코드의미
a변수 a의 값
&a변수 a의 주소 (메모리에서 a가 저장된 위치)
scanf("%d", &a)a의 주소에 정수를 입력받아 저장

문자열 입력 시 &가 필요 없는 이유

%s로 문자열을 입력받을 때는 &를 붙이지 않습니다.

c
코드 하이라이팅 중...

배열의 이름은 그 자체가 배열의 시작 주소이기 때문입니다. name이 이미 주소이므로 &를 붙일 필요가 없습니다.

여러 값 동시 입력

하나의 scanf로 여러 값을 동시에 입력받을 수 있습니다.

c
코드 하이라이팅 중...

서식 지정자와 전달하는 변수의 개수와 순서가 일치해야 합니다.



getchar() - 문자 한 개 입력

getchar()는 키보드에서 문자(char) 하나를 입력받는 함수입니다. 출력 함수 putchar의 반대 역할입니다.

c
코드 하이라이팅 중...

getchar는 인자가 없고, 입력받은 문자를 반환값으로 돌려줍니다. 그래서 & 없이 대입 연산자(=)로 변수에 저장합니다.

getchar 예시

c
코드 하이라이팅 중...

getchar vs scanf 비교

문자 한 개를 입력받을 때 getchar()scanf("%c", &ch)는 동일한 결과를 냅니다.

c
코드 하이라이팅 중...
구분getcharscanf
입력 단위문자 한 개다양한 형식
서식 지정불가가능 (%d, %c, %s 등)
사용법ch = getchar();scanf("%c", &ch);


gets() - 문자열 입력

gets()는 키보드에서 한 줄의 문자열을 입력받는 함수입니다. scanf("%s")와 달리 공백을 포함한 문자열을 입력받을 수 있습니다.

c
코드 하이라이팅 중...

gets vs scanf 비교

c
코드 하이라이팅 중...
구분getsscanf("%s")
공백 처리공백 포함 입력공백 전까지만 입력
입력 단위한 줄 전체공백/줄바꿈 전까지
사용 예gets(name);scanf("%s", name);

입력 함수 비교 정리

구분scanfgetchargets
입력 단위다양한 형식문자 한 개문자열 (한 줄)
서식 지정가능불가불가
공백 처리%s는 공백 전까지공백도 입력 가능공백 포함 입력
& 사용필요 (문자열 제외)불필요 (반환값 사용)불필요 (배열 이름 = 주소)
사용 예scanf("%d", &a);ch = getchar();gets(str);

정보처리기사 실기 대비 문제