C언어 표준 입ㆍ출력함수 printf

    2018-02-06 13:26:49 작성

    printf

    int printf(const char *const _Format, ...)

    printf 함수는 앞의 예제에서 보듯이 문자열을 출력하는 함수 입니다.
    C언어에서는 " "(쌍따옴표) 사이에 문자열을 표현합니다.
    printf 함수의 첫번째 인자로 문자열을 전달하면, 전달된 문자열을 화면에 출력해줍니다.
    ... 은 가변인자로 여러개의 인자를 가변적으로 받을 수 있습니다.
    출력 양식 변환 기호에 대응하여 값을 전달합니다.

    #include <stdio.h>
    
    int main(void) {
        int age = 30;
        printf("Welcome to ezcode! \a \n");
        printf("I like programming \n");
        printf("제 나이는 %d입니다. \n", age);
        return 0;
    }


    위의 예제에서 보듯이 문자열이 출력됨을 알 수 있습니다.
    \n은 특수 문자로 개행을 의미 하고 이러한 특수문자를 \(역슬래쉬)로 이스케이프 하여 이스케이프 문자라고도 합니다.
    특수문자는 \n말고도 다음과 같은 것이 있습니다.

    특수문자
    \a 경고음
    \b 백스페이스(back space)
    \f 폼 피드 (form feed)
    \n 개행 (new line)
    \r 캐리지 리턴(carriage return)
    \t 수평 탭
    \v 수직 탭
    ' ' 홀 따옴표
    \" " 쌍 따옴표
    \\ \ 출력
    %% % 출력

    위의 예제의 7행에서 보면 %d 라는것은 두번째 인자로 받은 값을 정수로 표현한다고 했습니다.
    이러한 것을 출력 양식 변환 기호(서식문자) 라고 하고 다음과 같은 것이 있습니다.

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


    정수의 출력 예 (%d, %u, %o, %x)

    8진수를 8진수 답게, 16진수를 16진수 답게 출력하려면 %o와 %x 사이에 #을 넣으면 됩니다.
    10진 정수 출력시 자릿수를 마추려면 %와 d 사이에 숫자를 넣으면 됩니다.

    #include <stdio.h>
    
    int main(void) {
        int a = 7;
        int b = 13;
        int c = 123;
        printf("%o \t %#o \n", a, a);
        printf("%x \t %#x \n\n", b, b);
        printf("|%d|\n", c);
        printf("|%5d|\n", c);
        printf("|%-5d|\n", c);
        printf("|%05d|\n", c);
        return 0;
    }


    실수의 출력 예 (%f, %e, %g)

    %g의 경우 소수점 자릿수가 늘어나면 e표기법으로 출력됩니다.
    실수 출력시 자릿수와 소수점 자리수를 마추려렴 %와 f 사이에 숫자를 넣어면 됩니다.

    #include <stdio.h>
    
    int main(void) {
        double a = 0.1234;
        double b = 0.12345678;
        double c = 0.000123;
        double d = 0.0000123;
        double e = 12.12345;
    
        printf("%f \n", a);
        printf("%e \n", a); //e표기법 소문자
        printf("%f \n", b);
        printf("%E \n", b); //e표기법 대문자
        printf("%g \n", c); //%f스타일
        printf("%g \n", d); //%e스타일
        printf("\n");
        printf("|%f| \n", e);
        printf("|%9.1f| \n", e);
        printf("|%-9.1f| \n", e);
        printf("|%09.4f| \n", e);
        return 0;
    }


    문자 출력 예 (%c)

    문자는 ' '(홀따옴표)에 한개의 문자로 표현합니다.
    문자는 char형으로 엄밀히 따지면 1byte 정수형 자료형이며 ASCII코드에 대응하는 문자를 의미하게 됩니다.

    #include <stdio.h>
    
    int main(void) {
        char a = 'A';
    	int b = 97;
    	printf("a = %c \n", a);
    	printf("a = %d \n", a); // 문자 'A'를 정수로 출력
    	printf("b = %c \n", b); // 정수 97을 ASCII 문자로 출력
        return 0;
    }


    문자열 출력 예 (%s)

    문자열은 " "(쌍따옴표)에 문자열을 표현합니다.
    문자열의 출력폭과 정렬을 %와 s 사이에 숫자를 넣어 지정할 수 있습니다.
    음수일경우 왼쪽 정렬됩니다.

    #include <stdio.h>
    
    int main(void) {
        char *a = "AAA";
        char b[] = "BBB";
    
        printf("%s %s \n", a, b);
        printf("%-8s %14s %6s\n", "이름", " 전공", "학년");
        printf("%-8s %14s %6d\n", "남기용","컴퓨터과학", 1);
        printf("%-8s %14s %6d\n", "김주현", "전자공학", 3);
        return 0;
    }


    char *a 와 char b[] 는 각각 포인터와 배열에 쓰이는 연산자이고 이것은 포인터 및 배열을 배우시면 알 수 있습니다.