Skip to Main Content

C언어 기초 가이드 STEP 1: 표준 입출력 함수

코딩 학습 가이드는 소프트웨어학과 송오영교수님이 검수하였습니다.

표준 입출력 함수

사용자가 프로그램과 대화하기 위해 사용하는 함수를 입출력 함수 또는 I/O(Input/Output) 함수라고 합니다.
printf() 함수scanf() 함수는 C언어 표준 입출력 함수 중에서 가장 많이 사용되는 대표적인 입출력 함수입니다.
printf() 함수와 scanf()함수의 f는 formatted의 약자이며, 서식화된 입출력을 지원한다는 의미입니다.
이 함수는 데이터를 어떤 서식에 맞춰 입출력할지 서식문자를 통해 직접 지정할 수 있습니다.

C 프로그램을 작성할 때, 거의 필수적으로 써놓고 시작하는 문장이 있습니다. 바로 #include <stdio.h>입니다.
stdio는 Standard Input/Output library의 약어로써, 말 그대로 표준 입출력과 관련된 모든 내용들이 들어가 있는 표준 라이브러리입니다.
따라서 printf() 함수와 scanf() 함수가 정의되어 있는 파일을 사용하려면 #include로 stdio.h 헤더 파일을 선언해야 합니다.

printf() 함수

printf() 함수는 C언어의 표준 출력 함수로, 여러 종류의 데이터를 다양한 서식에 맞춰 출력할 수 있게 해줍니다.

1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main(void)
{
    printf("안녕하세요?\n");
    printf("제 나이는 %d살입니다.\n"21);
    return 0;
}

 

1행 : #include는 헤더 파일을 포함하는 문법입니다. printf 함수를 사용하기 위해서는 stdio.h 헤더 파일이 필요합니다.
표준 라이브러리에는 다양한 표준함수가 존재합니다.
printf와 같은 표준함수의 호출을 위해서는 관련 있는 헤더파일 선언을 해야합니다.

3행 : 프로그램이 실행되자마자 컴퓨터는 main 함수를 제일 먼저 호출합니다.

5행 : printf를 써주고, 괄호 안에 " "(큰따옴표)로 감싼 내용을 넣은 뒤 ;(세미콜론)을 붙이면 printf 함수가 실행됩니다.
" "(큰따옴표)로 감싼 부분을 문자열이라고 합니다.

6행 : %d는 데이터를 10진수(decimal)의 형태로 출력한다는 의미입니다.

7행 : return 0은 프로그램의 종료 상태를 알리는 용도로 사용된 것입니다.
보통 0은 정상적인 종료의 상황에서 전달하는 값입니다. 비정상적인 종료의 상황에서는 0이 아닌 값을 전달합니다.

scanf() 함수

scanf() 함수는 C언어의 표준 입력 함수로 사용자로부터 여러 종류의 데이터를 다양한 서식에 맞춰 입력받을 수 있게 해줍니다.
printf() 함수와 사용방법은 유사하지만, 입력된 데이터를 저장할 변수의 이름 앞에 &(주소 연산자)를 붙여야 합니다.
추후 포인터를 학습하면서 자세히 다룰 부분인데, 변수의 메모리 주소를 의미합니다.

다음 예제는 사용자로부터 2개의 정수를 입력받아서 그 합을 출력하는 예제입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(void)
{
    int result;
    int num1, num2;
 
    printf("첫번째 정수를 입력하세요 : ");
    scanf("%d"&num1);
    printf("두번째 정수를 입력하세요 : ");
    scanf("%d"&num2);
 
    result = num1 + num2;
    printf("%d + %d = %d", num1, num2, result);
    return 0;
}
 

 

1행 : #include는 헤더 파일을 포함하는 문법입니다. scanf 함수를 사용하기 위해서는 stdio.h 헤더 파일이 필요합니다.
표준 라이브러리에는 다양한 표준함수가 존재합니다.
scanf와 같은 표준함수의 호출을 위해서는 관련 있는 헤더파일 선언을 해야합니다.

3행 : 프로그램이 실행되자마자 컴퓨터는 main 함수를 제일 먼저 호출합니다.

5,6행 : result, num1, num2라는 이름의 변수를 선언합니다.

8,10행 : 정수를 입력하라는 안내 메시지를 출력합니다.
printf를 써주고, 괄호 안에 " "(큰따옴표)로 감싼 내용을 넣은 뒤 ;(세미콜론)을 붙이면 printf 함수가 실행됩니다.
" "(큰따옴표)로 감싼 부분을 문자열이라고 합니다

9,11행 : scanf 함수에 포함된 '&'기호는 주소 연산자라고 합니다.
이 주소 연산자는 입력받은 데이터를 뒤에 나오는 변수에 저장하라는 의미입니다.
%d는 데이터를 10진수(decimal)의 형태로 입력한다는 의미입니다.

13행 : num1과 num2를 더한 값을 result에 저장합니다.

14행 : printf 함수 안의 %d는 10진수(decimal)를 출력할 때 사용하는 서식문자입니다.
서식문자 하나에 변수 하나가 대응됩니다. 여기서는 %d를 3개 사용했기 때문에 변수도 3개를 지정하였습니다.

15행 : return 0은 프로그램의 종료 상태를 알리는 용도로 사용된 것입니다.
보통 0은 정상적인 종료의 상황에서 전달하는 값입니다. 비정상적인 종료의 상황에서는 0이 아닌 값을 전달합니다.


Visual Studio 2013 버전 이상부터 scanf() 함수를 사용하면 에러가 나면서 컴파일이 안됩니다.
 에러 메시지를 보면 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead.
 To disable deprecation, use _CRT_SECURE_NO_WARNINGS. 라고 나옵니다.

이스케이프 시퀀스(escape sequence)

printf() 함수에 나온 '\n'과 같은 문자를 이스케이프 시퀀스(escape sequence)라고 합니다.
이러한 이스케이프 시퀀스는 프로그램의 결과가 화면에 출력될 때 사용할 특수문자를 위해 만들어졌습니다.
여러 이스케이프 시퀀스가 있지만 \n\"만 기억해도 충분합니다.

이스케이프 시퀀스 출력 내용
\a 경고음
\b 백스페이스
\f 폼 피드
(프린트 출력시 현재 페이지를 마침)
\n 줄 바꿈
\r 캐리지 리턴
(커서를 맨 앞으로 이동)
\t 수평 탭
\v 수직 탭
\' 작은 따옴표
\" 큰 따옴표
\? 물음표
\\ 역슬래쉬

서식문자

printf() 함수와 scanf() 함수에 나온 '%d'와 같은 문자를 서식문자라고 합니다. 이러한 서식문자를 통해 데이터의 서식을 사용자가 직접 지정할 수 있습니다.

서식문자 자료형 출력 형태
%d char, short, int 부호 있는 10진수 정수
%ld long 부호 있는 10진수 정수
%lld long long 부호 있는 10진수 정수
%u unsigned int 부호 없는 10진수 정수
%o unsigned int 부호 없는 8진수 정수
%x, %X unsigned int 부호 없는 16진수 정수
%f float, double 10진수 방식의 부동소수점 실수
%Lf long double 10진수 방식의 부동소수점 실수
%e, %E float, double e 또는 E 방식의 부동소수점 실수
%g, %G float, double 값에 따라 %f나 %e 사용
%c char, short, int 값에 대응하는 문자
%s char * 문자열
%p void * 포인터의 주소 값