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* | 포인터의 주소 값 |
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;
}
%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;
}
문자는 ' '(홀따옴표)에 한개의 문자로 표현합니다.
문자는 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 사이에 숫자를 넣어 지정할 수 있습니다.
음수일경우 왼쪽 정렬됩니다.
#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[] 는 각각 포인터와 배열에 쓰이는 연산자이고 이것은 포인터 및 배열을 배우시면 알 수 있습니다.