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

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

요약

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에는 변수의 주소를 전달합니다. 주소를 알면 해당 메모리 위치에 직접 값을 쓸 수 있기 때문입니다.

scanf가 &a를 통해 변수 a의 주소(100)를 전달받아 해당 위치에 42를 저장하는 과정
scanf는 변수의 주소를 받아서 해당 위치에 입력값을 저장합니다
코드의미
a변수 a의 값
&a변수 a의 주소 (메모리에서 a가 저장된 위치)
scanf("%d", &a)a의 주소에 정수를 입력받아 저장

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

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

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

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

char name[20] 배열에서 name이 시작 주소 200을 가리키고, Hello 문자열이 각 칸에 저장된 모습
배열 이름 name은 첫 번째 칸의 주소(200)를 이미 가지고 있습니다

여러 값 동시 입력

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

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

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


getchar() - 문자 한 개 입력 기초

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

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

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

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);

입력 함수에서 &와 주소 개념이 어렵게 느껴졌다면, 포인터 페이지에서 주소와 메모리의 관계를 더 자세히 배울 수 있습니다. 문자열 처리가 궁금하다면 문자열 페이지도 함께 읽어보세요.


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


Footnotes

  1. 함수가 실행을 마치고 결과를 돌려주는 값입니다. getchar()는 입력받은 문자를, scanf()는 성공적으로 읽은 항목의 개수를 반환합니다.


관련 글

(35개)
제목태그시험
C언어 함수 포인터 (Function Pointer)
C언어
-
C언어 구조체 배열
C언어
-
C언어 구조체 포인터
C언어
-