정처기 감자
C언어입출력함수

검색

검색어를 입력해 개념과 문제를 찾습니다.

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

코딩C언어
읽는데 6분 소요
처음 쓰여진 날: 2026-03-14
마지막 수정일: 2026-03-21
조회수: —
선수학습(1개)
  • C언어 출력 함수 - putchar, printf, puts

요약

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의 주소에 정수를 입력받아 저장
&를 빼면 어떻게 되나요?
scanf("%d", a);처럼 &를 빼면 a에 들어있는 값을 주소로 해석하여 엉뚱한 메모리에 쓰려고 합니다. 초기화하지 않은 변수에는 의미 없는 값이 들어있으므로, 프로그램이 비정상 종료되거나 예측할 수 없는 동작을 합니다.

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

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

c
코드 하이라이팅 중…

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

char name[20] 배열에서 name이 시작 주소 200을 가리키고, Hello 문자열이 각 칸에 저장된 모습
배열 이름 name은 첫 번째 칸의 주소(200)를 이미 가지고 있습니다
%s는 공백 전까지만 읽습니다
scanf("%s", name);으로 "Hello World"를 입력하면 공백 전의 "Hello"만 저장됩니다. 공백을 포함한 문자열을 입력받으려면 gets 함수를 사용합니다.

여러 값 동시 입력

하나의 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);
gets는 보안 취약점이 있습니다
gets는 입력 길이를 제한하지 않아 버퍼 오버플로우(정해진 저장 공간을 넘치게 쓰는 오류)가 발생할 수 있습니다. 실무에서는 fgets(str, sizeof(str), stdin)을 사용하지만, 정보처리기사 시험에서는 gets가 출제됩니다.

입력 함수 비교 정리 기초

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

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


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


Footnotes

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


메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)

관련 글

(41개)
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 1회 이론 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 1회 이론 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999