출력 함수 printf()

 

printf()함수에 대하여 이야기하기전에 함수에 대한 필수적인 용어를 먼저 보자.

    • 함수 정의 : 사용자가 함수를 만드는(정의하는) 과정
    • 함수 호출 : 라이브러리 함수를 포함해 만든 함수를 사용하는 것
    • 매개변수 : 함수를 정의할 때 사용되는 입력변수
    • 인자 : 함수 호출 과정에서 전달되는 여러 입력값

printf() 함수는 헤더파일 stdio.h에 있는 함수이다.

 

printf()는 인자를 크게 형식문자열과 출력 목록으로 구성된다.

//printf(" 형식문자열(출력할 문자) ", 출력목록);

int a = 3;

int b = 4;

 

    printf(" %d 와 %d의 합은 %d입니다. \n", a, ba+b);

 

형식문자열에는 출력될 일반 문자와 형식지정자, 이스케이프 문자로 구성된다.

 

 

형식 지정자

 

형식 지정자는 어떠한 자료형태로 표현할 것인지 지정하는 문자이다.

 

서식문자 자료형 출력
%c char, int 문자 출력
%d, %i int 부호 있는 정수 출력
%o unsigned int 부호 없는 8진수 출력
%x, %X unsigned int 부호 없는 16진수 출력, x는 소문자 출력, X는 대문자 출력
%u unsigned int 부호 없는 10진수 출력
%e, %E double 실수를 지수 형식으로 출력,  ex) 1.2345e+002
%f , %lf double 소수 형식 출력
%s char * 문자열 출력
%p void * 주소값을 16진수로 출력

 

형식 지정자는 %와 서식문자 d 사이에 %[옵션(플래그)][폭] . [출력문자수] d와 같이 표현한다.

 

 

이스케이프 문자

 

이스케이프 문자는 역슬래쉬 와 문자의 조합으로 표현하는 문자이다.

이러한 문자는 \n과 같이 다음 줄로 이동하는 등 특수한 문자, 제어문자들을 표현한다.

 

제어 문자 코드값(10진수) 제어문자 표현 의미
널문자 0 \0  아스키코드 0번
경고 7 \a  경고음 울림
백스페이스 8 \b  한 문자 뒤로 이동
수평탭 9 \t  수평으로 탭만큼 이동
개행문자 10 \n  다음 줄로 이동
수직탭 11 \v  수직으로 탭만큼 이동
폼피드 12 \f 새 페이지의 처음으로 이동
캐리지 리턴 13 \r 현재 줄의 처음으로 이동
큰따옴표 34 \" " 문자 표현
작은따옴표 39 \' ' 문자 표현
역슬래쉬 92 \ 문자 표현

위와 같이 여러문자가 있다.

여기서 '\'(역슬래쉬)는 키보드에 없어지면서 '\'문자를 쓰면 '\'로 인식한다.

개인적으로 printf()함수를 쓰면서 이스케이프 문자중에 '\n' 을 제일 많이 쓰는거 같다.

 


 

입력 함수 scanf()

 

scanf()는 프로그램 사용자로부터 변수의 값을 입력하게 하여 입력값을 저장하는 함수이다.

 

//scanf(" 형식문자열 ", &입력변수);

int a, b;

    scanf(" %d %d ", &a &b );

 

위와 같이 위와 같이 scanf()함수에서는 형식지정자와 일반문자, &입력변수로 구성된다.

&는 주소연산자로 뒤에 표시되는 변수의 주소값을 반환한다는 의미이다.

입력값이 저장되는 변수를 찾는다는 의미에서 주소연산자 &가 사용되고 주소연산자를 사용하지 않으면 오류가 발생하게 된다.

 

입력 함수 사용

 위 사진과 같이 여러 값을 입력할때 스페이스 또는 엔터키를 눌러 입력값을 구분하고, 마지막 값을 입력한 후에는 엔터키를 눌러야 프로그램이 진행된다. 

 

 여기서 sacnf()함수 사용시 주의할 점으로 최근 비주얼 스튜디오에서는 scanf()함수를 사용하면 경고 또는 오류가 발생한다. 보안문제로 사용을 권장하지 않고 있는 상태이고, scanf_s()로 대체되고 있다. 

비주얼 스튜디오 2017 이하에서는 #include<stdio.h>  문장 전에 #define _CRT_SECURE_NO_WARNINGS 를 정의하여 경고메시지를 발생하지 않도록 하였지만, 2019에서는 이 방법이 되지않아 scanf_s()함수를 사용하여 경고 메시지를 발생하지 않도록 하자.

 또, scanf()함수를 사용하면서 엔터키가 원하지 않는 변수에 저장되는 경우도 있다. 입력에는 임시저장 장소인 버퍼(buffer)를 사용하는데, 입력과 같이 자료를 처리할 때 바로 처리하지 않고 중간에 임시로 저장하고, 버퍼가 가득차거나 명령에 의해 호출되어 입력을 수행한다. scanf()함수를 여러번 호출하게 되면 엔터를 누르면서 버퍼에 엔터가 저장되고 실제 문자에는 저장되지 않을 수 있다. 그럴 때 함수 fflush(stdin)을 호출하여 버퍼를 없애버리자.

 

    scanf("%d", &a);

    fflush(stdin); //입력 버퍼를 모두 지움

    scanf("%c", &ch);

 

여기까지 대표적인 입출력 함수 printf(), scanf()를 알아보았다.

+ Recent posts