c언어/C언어 개념정리

C언어의 표준 입출력 라이브러리 <studio.h> 1. printf()

코드라니(CODERANY) 2024. 12. 2. 18:16

C 언어의 <stdio.h> 라이브러리는 표준 입출력 기능을 제공하는 함수들을 포함하고 있습니다. 이 라이브러리를 사용하면 콘솔과 파일 간의 데이터 입출력을 손쉽게 처리할 수 있습니다. 

 

다른 입출력 라이브러리보기

더보기

1. printf() :  현재글

2. scanf() 

3. fopen()

4. fclose()

5. fgets()

6. fputs()

7. fprintf()

8. fscanf()

1. printf() 함수의 정의 

printf() 함수는 표준 출력 스트림인 콘솔에 텍스트와 데이터를 출력하는 함수입니다. 

이 함수는 <stdio.h> 헤더 파일에 포함되어 있으며, 프로그램에서 텍스트를 출력할 필요가 있을 때 주로 사용됩니다.

 

형식

int printf(const char *format, ...);

 

format: 출력할 문자열의 형식을 지정하는 문자열입니다. 이 문자열은 일반 텍스트와 형식 지정자를 포함할 수 있습니다.
...: 가변 인자 목록으로, 포맷 문자열에 따라 출력할 값들이 위치할 수 있습니다.

 

2. 주요 기능 

형식화된 출력: 문자열, 정수, 실수와 같은 다양한 데이터 타입을 형식화하여 출력할 수 있습니다.
가변 인자: 매개변수로 전달되는 인자의 수에 제한이 없으며, 다양한 형식 지정자를 사용하여 출력을 조정할 수 있습니다.

printf("Hello, %s!\n", "World"); // "Hello, World!" 출력

 

3. 형식 지정자

printf() 함수에서 사용되는 형식 지정자는 출력할 데이터의 타입을 나타내며, 포맷 문자열 내에서 % 기호로 시작합니다. 

%d 10진 정수 (int) %e
%E
지수 형식 (float, )
%i 10진 정수 (int) %g
%G
자동 선택 (float)
%u 부호 없는 10진 정수 (unsigned int) %c 문자 한 개(char)
%o 8진 정수 (unsigned int) %s 문자열 (char 배열)
%x
%X
16진 정수 (unsigned int, 소문자)
16진 정수 (unsigned int, 대문자)
%p 포인터 주소
%f
%F
실수형 데이터 출력, 부동 소수점 수 (float)
기본적으로 소수점 이하 6자리
%% 퍼센트 기호 (%)

 

 4. 사용 예제 

4.1 기본 사용

#include <stdio.h>

int main() {
    printf("Hello, World!\n"); // "Hello, World!" 출력
    return 0;
}

4.2 다양한 데이터 타입 출력

#include <stdio.h>

int main() {
    int num = 42;
    float pi = 3.14159;
    char letter = 'A';
    char name[] = "Alice";

    printf("정수: %d\n", num);         // 정수 출력
    printf("실수: %.2f\n", pi);        // %.2f는 소수점 이하 2자리까지 출력하는 형식지정자
    printf("문자: %c\n", letter);      // 문자 출력
    printf("문자열: %s\n", name);      // 문자열 출력

    return 0;
}

 

4.3 여러 인자 사용

#include <stdio.h>

int main() {
    int a = 5, b = 10;
    printf("a: %d, b: %d, 합: %d\n", a, b, a + b); // a와 b의 값과 합 출력
    return 0;
}

 

5. 포맷 지정자와 정렬 

printf() 함수는 포맷 지정자를 사용하여 출력의 너비와 정렬을 조정할 수 있습니다. 이를 통해 출력의 가독성을 높일 수 있습니다.

 

5.1 출력 너비 지정

출력 너비를 지정하려면 % 뒤에 숫자를 추가합니다:

#include <stdio.h>

int main() {
    printf("%5d\n", 42);  // 42를 5자리로 오른쪽 정렬하여 출력
    printf("%-5d\n", 42); // 42를 5자리로 왼쪽 정렬하여 출력
    return 0;
}

위 예제에서 %-5d는 정수를 왼쪽 정렬하여 출력하고, %5d는 오른쪽 정렬하여 출력합니다.

5.2 소수점 자리수 지정
실수의 소수점 이하 자리수를 지정할 수도 있습니다:

#include <stdio.h>

int main() {
    float pi = 3.141592653589793;
    printf("%.2f\n", pi); // 3.14 출력
    printf("%.5f\n", pi); // 3.14159 출력
    return 0;
}

 

 

6. 특수문자 출력 

printf()는 여러 특수 문자를 출력할 수 있는 기능도 제공합니다.

\n: 줄 바꿈
\t: 탭
\\: 백슬래시
\": 큰따옴표

#include <stdio.h>

int main() {
    printf("Hello,\nWorld!\n"); // 줄 바꿈
    printf("Tab\tSpace\n");      // 탭
    printf("Quote: \"Hello!\"\n"); // 큰따옴표
    return 0;
}

 

7. 반환 값

printf() 함수는 출력된 문자의 개수를 반환합니다. 

만약 오류가 발생할 경우 음수를 반환합니다. 이를 통해 출력 성공 여부를 확인할 수 있습니다.

#include <stdio.h>

int main() {
    int count = printf("Hello, World!\n");
    if (count < 0) {
        printf("출력 오류 발생\n");
    } else {
        printf("출력된 문자 수: %d\n", count);
    }
    return 0;
}

 

#include <stdio.h>

int main() {
    int count = printf("H\n");
    if (count < 5) {
        printf("출력 오류 발생\n");
    } else {
        printf("출력된 문자 수: %d\n", count);
    }
    return 0;
}

 

 8. 주의사항

버퍼링: printf()는 내부적으로 출력 버퍼를 사용하므로, 출력이 즉시 이루어지지 않을 수 있습니다. 프로그램이 종료될 때 버퍼의 내용이 자동으로 출력되지만, fflush(stdout);를 사용하여 버퍼를 강제로 비울 수 있습니다.

형식 지정자와 인자의 불일치: 형식 지정자와 인자의 타입이 일치하지 않으면 예기치 않은 결과가 발생할 수 있습니다. 예를 들어, %d에 실수를 전달하면 잘못된 값을 출력할 수 있습니다.

메모리 관리: printf()는 메모리를 동적으로 할당하지 않지만, 출력할 문자열이 너무 길면 스택 오버플로우를 발생시킬 수 있습니다. 적절한 크기의 버퍼를 사용해야 합니다.