printf 함수 이야기

특수문자의 출력이 필요한 이유

  • 문자열에 포함이 되는 특수문자는 작은 따옴표로 묶어서 독립된 문자상수로도 존재할 수 있다.

⁠char ch='\n';⁠

  • 큰 따옴표는 문자열의 시작과 끝으로 해석이 되니, 큰 따옴표 자체의 출력을 원하는 경우에는 큰 따옴표 앞에 \ 문자를 붙이기로 함

⁠printf("앞집 강아지가 말했다. \"멍~! 멍~!\" 정말 귀엽다.");⁠

printf 함수의 서식지정

  • printf의 f는 formatted(서식이 지정된)을 의미 즉, 서식이 지정된 형태의 출력
  • 출력양식이 만들어진 상태에서 출력을 진행한다

“제 나이는 10진수로 12살, 16진수로 C살입니다.”

⁠"제 나이는 10진수로 %d살, 16진수로 %X살입니다." // 대문자 X면 알파벳 대문자, 소문자 x면 알파벳 소문자⁠

서식 문자의 종류와 그 의미

  • %d = char, short, int
  • %ld = long
  • %lld = long long
  • %u = unsigned int(부호 없는 10진수 정수)
  • %o = unsigned int (부호 없는 8진수 정수) 8진수를 8진수답게 출력하려면 %#o
  • %x, %X = unsigned int(부호 없는 16진수 정수) 16진수를 16진수답게 출력하려면 %#x
  • %f = float, double
  • %Lf\= long double
  • %e, %E = float, double(e 또는 E 방식의 부동소수점 실수)
  • %g, %G = float, double(값에 따라 %f와 %e 사이에서 선택)
  • %c = char, short, int(값에 대응하는 문자)
  • %s = char *(문자열)
  • %p = void *(포인터의 주소 값)

필드 폭을 지정하여 정돈된 출력 보이기

  • 출력의 형태는 기본적으로 오른쪽 정렬이다!
  • %8d = 필드 폭을 8칸 확보하고, 오른쪽 정렬해서 출력을 진행한다.
  • %-8d = 필드 폭을 8칸 확보하고, 왼쪽 정렬해서 출력을 진행한다.
#include <stdio.h>

int main(void)
{
    printf("%-8s %14s %8s \n", "이  름", "전공학과", "학년");
    printf("%-8s %14s %5d \n", "김동수", "전자공학", 3);
    printf("%-8s %14s %5d \n", "이을수", "캄퓨터공학", 2);
    printf("%-8s %14s %5d \n", "한선영", "미술교육학", 4);
    return 0;
}
 
// 결과
이  름   전공학과   학년 
김동수   전자공학     3 
이을수 캄퓨터공학     2 
한선영 미술교육학     4

scanf 함수

정수 기반의 입력형태 정의

  • scanf 함수는 printf 함수의 상대적인 기능
    • 어떻게 받아들일 거니?
    • 어디에 저장할까?
  • %d = 10진수 정수의 형태로 데이터를 입력 받는다.
  • %o = 8진수 양의 정수의 형태로 데이터를 입력 받는다.
  • %x = 16진수 양의 정수의 형태로 데이터를 입력 받는다.
#include <stdio.h>

int main(void)
{
    int num1, num2, num3;
    printf("세 개의 정수 입력: ");
    scanf("%d %o %x", &num1, &num2, &num3);

    printf("입력된 정수 10진수 출력: ");
    printf("%d %d %d \n", num1, num2, num3);
    return 0;
}

// 결과
세 개의 정수 입력: 12 12 12 // 똑같은 정수 12를 입력해도, 실제 저장되는 값에는 차이가 있다.
입력된 정수 10진수 출력: 12 10 18

실수 기반의 입력형태 정의

  • printf에서는 %f, %e, %g의 의미가 각각 달랐지만, scanf 함수에서는 ‘float형 데이터를 입력 받겠다' 라는 동일한 의미를 담고 있다.
  • %lf = double
  • %Lf = long double
#include <stdio.h>

int main(void)
{
    float num1;
    double num2;
    long double num3;

    printf("실수 입력1(e 표기법으로): ");
    scanf("%f", &num1);
    printf("입력된 실수 %f \n", num1);

    printf("실수 입력2(e 표기법으로): ");
    scanf("%lf", &num2);
    printf("입력된 실수 %f \n", num2);

    printf("실수 입력3(e 표기법으로): ");
    scanf("%Lf", &num3);
    printf("입력된 실수 %Lf \n", num3);
    return 0;
}

// 결과
실수 입력1(e 표기법으로): 1.1e-3
입력된 실수 0.001100 
실수 입력2(e 표기법으로): 0.1e+2
입력된 실수 10.000000 
실수 입력3(e 표기법으로): 0.17e-4
입력된 실수 0.000017
  • 위 결과를 바탕으로 알 수 있는 점
    • 실수의 입력과정에서 e 표기법을 사용해도 된다.
    • float, double, long double의 데이터 출력에 사용되는 서식문자는 각각 %f, %f, %Lf이다.
    • float, double, long double의 데이터 입력에 사용되는 서식문자는 각각 %f, %lf, %Lf이다.
  • 서식문자 %s가 문자열의 입력에 사용된다.

'C' 카테고리의 다른 글

변수의 존재기간과 접근범위  (0) 2025.03.12
조건에 따른 흐름의 분기  (0) 2025.03.12
반복 실행을 명령하는 반복문  (0) 2025.03.12
C 언어 자료형  (0) 2025.03.12
자료형 및 Byte 개념  (0) 2025.03.12

+ Recent posts