안녕하세요. BlockDMask입니다.
지난 시간에 scanf에 이어서 이번 시간은 C, C++에서 출력을 맡고 있는 printf라는 함수에 대해서 알아보려고 합니다.
C언어를 시작할 때 콘솔 창에 문자, 숫자, 문자열 등을 찍어보기 때문에 제일 먼저 접하는 함수가 printf이었을 텐데요.
그 printf 함수에 대해서 알아보려고 합니다.
먼저 printf 사용법을 알아보고 printf에서 사용하는 \n과 같은 특수기호를 알아보고 그다음 %d 와 같은 서식 문자에 대해서 알아보겠습니다.
<목차>
1. printf 사용법, 특수기호, 서식문자 정리
2. printf 예제
1. C언어, C++ printf 정리
1-1) printf 기본 사용법
- 헤더 파일
<stdio.h>
- 함수 모양
int printf("출력할 데이터와 그 서식", 변수 1, 변수 2... );
int printf(const char* format, ... );
첫 번째 인자로 들어온 데이터들을 표준 출력(stdout)에 출력하는 함수입니다.
두 번째 인자부터는 첫 번째 인자의 서식 문자의 개수와 종류에 따라서 변수가 들어오게 됩니다.
- 첫번째 인자 (const char* format)
출력할 데이터를 집어넣는 구간입니다.
그냥 "내 나이는 99살" 이런 식으로 아무 변수도 없는 날것의 문자열을 출력하는 것은
printf("내 나이는 99살") 이렇게 출력을 하면 됩니다.
하지만, 99라는 숫자를 변수로 집어넣으려면 특수한 처리를 해야 합니다.
printf("내 나이는 %d살", ...) 이런 식으로 %d 서식 문자라는 것을 통해서 우리는 컴퓨터에게
"%d"라는 위치에는 변수가 들어갈 것이다.
라고 선언해 주는 것입니다.
그리고 그 변수는 우리가 두 번째 인자로 넣어주는 것입니다. 이렇게 말이죠.
int a = 99;
printf("내 나이는 %d살", a);
이렇게 서식 문자라는 특수한 표기를 통해서 int 타입의 변수가 들어갈 것이라고 printf 함수의 첫 번째 인자에 표기를 해두고, 두 번째 인자에 그 변수를 작성하는 형식으로 진행하면 됩니다.
- 두 번째, 세 번째,... N 번째 인자
위에서 설명했듯이, 첫 번째 인자에서 변수가 들어갈 것이라고 표기를 해주면 그 표기한 개수에 따라서 두 번째 인자 세 번째 인자가 들어오게 됩니다.
아무런 서식 문자가 없는 예제.
printf("나의 이름 김땡땡, 나이는 99살");
하나의 서식 문자가 있는 예제
char name[20] = "김땡땡";
printf("나의 이름 %s, 나이는 99살", name);
두 개의 서식 문자가 있는 예제
char name[20] = "김땡땡";
int age = 99;
printf("나의 이름 %s, 나이는 %d살", name, age);
이렇게 서식 문자 %s, %d 이런 게 생겨날수록 뒤에 매개변수(인자)의 개수가 늘어납니다.
서식 문자의 종류와 순서에 맞춰서 매개변수(인자)를 잘 넣어야 합니다.
1-2) printf에서 사용하는 특수기호
\' : 작은따옴표
\" : 큰 따옴표
\? : 물음표
\\ : 백 슬래시(\)
\n : 줄 바꿈, 개행, new line
\t : 수평 탭 (tab)
1-3) printf에서 사용하는 서식 문자
%c : 문자 표기
%s : 문자열 표기
%f, %lf : 실수 표기
%u : 10진 정수 (부호 없음)
%d : 10진 정수 (부호 있음)
%o : 8진 정수 (부호 없음)
%x : 16진 정수 (부호 없음)
%lu : long 타입 (부호 없음)
%ld : long 타입 (부호 있음)
%llu : long long 타입 (부호 없음)
%lld : long long 타입 (부호 있음)
%p : 메모리 주소 표기
%% : 기호 % 표기
2. C언어, C++ printf 예제
2-1) printf 예제 - 서식 문자 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include <stdio.h>
int main(void)
{
char a = 'f';
char str[20] = "BlockDMask";
char* pStr = str;
int num1 = 10;
int num2 = -10;
printf("문자 출력 : %c\n", a);
printf("문자열 출력 : %s\n", str);
printf("10진 정수 출력(부호O) : %d\n", num1);
printf("10진 정수 출력(부호O) : %d\n", num2);
printf("10진 정수 출력(부호X) : %u\n", num1);
printf("8진 정수 출력(부호X) : %o\n", num1);
printf("8진 정수 출력(부호X) : %x\n", num1);
printf("주소 출력 : %p\n", pStr);
printf("주소 출력 : %p\n", str);
printf("주소 출력 : %p\n", &num1);
printf("주소 출력 : %p\n", &num2);
printf("기호 출력 : %%\n");
return 0;
}
|
cs |
이렇게 각 변수의 타입에 맞게 출력을 해주면 됩니다.
메모리 주소는 %p 서식 기호를 통해서 출력.
10진 정수는 %d 서식 문자를 통해서,
부호 없는 10진 정수 %u를 통해서,
8진수는 %o, 16진수는 %x
그리고 문자는 %c, 문자열은 %s 입니다.
이렇게만 알아도 어디 가서 printf 하는데 큰 불편함은 없을 것입니다.
2-2) printf 예제 - 특수 기호 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <stdio.h>
int main(void)
{
printf("탭\t탭\n");
printf("개행\n개행\n");
printf("이것은 \'작은 따옴표 \'입니다.\n");
printf("이것은 \"큰 따옴표 \"입니다.\n");
printf("이것은 \\ 백슬래시 \\ 입니다.\n");
printf("이것은 \? 물음표 \? 입니다.\n");
return 0;
}
|
cs |
이렇게 특수 문자들을 출력할 수 있습니다.
그냥 맨 앞에 \ 이거 하나 붙이면 출력이 된다고 생각하면 편합니다.
이 특수 문자들을 이용해서 printf 함수를 사용할 때 좀 더 깔끔하게 출력을 할 수 있습니다.
2-3) printf 예제 - 구구단 출력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include <stdio.h>
int main(void)
{
for (int i = 5; i < 7; ++i)
{
printf("구구단 %d단 시작\n", i);
for (int j = 1; j < 10; ++j)
{
printf("%d x %d = %d\n", i, j, i*j);
}
printf("\n\n");
}
return 0;
}
|
cs |
편의상 5단과 6단만 출력했습니다.
이렇게 printf의 개행만 이용해 보더라도, 깔끔하게 정리되어서 나온 걸 볼 수 있습니다.
이상으로 C언어, C++ printf 함수에 대한 포스팅을 마치겠습니다.
감사합니다.
'<개인공부> > [C언어, C++]' 카테고리의 다른 글
[C언어/C++] scanf 입력 함수 총정리 및 예제 (0) | 2021.01.25 |
---|---|
[C언어/C++] C언어 bool 타입에 대해서 (C99) (2) | 2021.01.18 |
[C언어/C++] for 반복문 사용법 및 예제 총정리 (5) | 2020.12.28 |
[C언어/C++] while 반복문 설명 및 예제 (0) | 2020.12.25 |
[C언어/C++] islower, isupper 대문자 소문자 확인 (0) | 2020.12.21 |
[C언어/C++] tolower, toupper 대문자 소문자 변경 (1) | 2020.12.16 |
[C언어/C++] isspace 함수 (공백, 탭, 개행을 확인하는 함수) (0) | 2020.12.10 |
[C언어/C++] isalpha 함수 (알파벳을 확인하는 함수) (1) | 2020.12.03 |