ft_printf_1일차

아따맘마·2020년 11월 6일
0

ft_printf

목록 보기
2/9

type 변환 지정자

  • %d : 부호 있는 10진수 정수(2byte)
  • %o : 부호 없는 8진수 정수(2byte)
  • %x : 부호 없는 16진수 정수(2byte)
  • %u : 부호 없는 10진수 정수(2byte)
  • %c : 단일 바이트 문자(1byte)
  • %s : 문자열(포인터 크기만큼 byte)
  • %f : 부호 있는 10진수 실수
  • %e : 지수표기법 실수
  • %E : E표기법 실수
  • %g : 값에 따라 %f와 %e중 선택
  • %G : 값에 따라 %f와 %E중 선택

플래그 지시문

플래그의미default
-지정한 필드 너비 내에서 결과를 왼쪽에 맞춰 표시오른쪽에 맞춰 표시
+부호 있는 형식에 대한 부호(+ or -)를 사용하여 출력값에 접두사를 추가-에 대해서만 기호 표시
0출력하는 폭의 남은 공간에 0으로 채운다.패딩이 없다.
공백양수일때는 부호를 출력하지 않고 공백으로 표시, 음수일 때는 -부호 출력공백이 표시되지 않는다.
#진법에 맞게 숫자 앞에 0, 0x, 0X를 붙인다.공백이 표시되지 않는다.

의미
숫자지정한 숫자만큼 폭을 지정하여 출력, 실수는 ., e+까지 포함

정밀도

정밀도의미
.숫자지정한 숫자만큼 소수점 아래 자리 출력

printf 옵션 사용

 %%[플래그][폭][.정밀도][길이]서식지정자
  • 출력할 변수의 개수만큼 %를 써줘야 한다.
  • 형식지정자의 첫번째 문자는 %이다. 만약 %를 별도로 출력하고 싶으면 %%로 써줘야 한다.

    ex

  • %#23.11x
  1. # : 8, 16진수 출력에서 공백대신 0 or 0x를 출력
  2. 23 : 현재문자 + 공백문자 포함 23칸을 차지, 왼쪽부터
  3. x : 16진수 출력
  4. .11 : 소수점 부분 11자릿수가 될때까지 나머지 부분을 0으로 채운다.
  • 출력숫자가 123이고 %5d로 한다면 123 으로 출력(2자리 공백)
  • 소수점은 자릿수에 따라 반올림 or 0으로 채워진다. precision을 참고

여러 printf 출력물

// 정수
printf("%u\n", 10);     	 	//  10: 부호 없는 10진 정수
printf("%d\n", -20);    	 	// -20: 부호 있는 10진 정수
printf("%i\n", -20);    		 // -20: 부호 있는 10진 정수
printf("%o\n", 071);    		 //  71: 부호 없는 8진 정수
printf("%x\n", 0xF1);   		 //  f1: 부호 없는 16진 정수(소문자)
printf("%X\n", 0xF1);   		 //  F1: 부호 없는 16진 정수(대문자)

// long, long long 정수
printf("%lu\n", ULONG_MAX);      // 4294967295: 부호 없는 long
printf("%ld\n", LONG_MAX);       // 2147483647: 부호 있는 long
printf("%llu\n", ULLONG_MAX);    // 18446744073709551615: 부호 없는 long long
printf("%lld\n", LLONG_MAX);     // 9223372036854775807: 부호 있는 long long

// 실수
printf("%f\n", 1.2f);    // 1.200000: 실수를 소수점으로 표기(소문자)
printf("%F\n", 1.2f);    // 1.200000: 실수를 소수점으로 표기(대문자)
printf("%e\n", 1.2f);    // 1.200000e+00: 실수 지수 표기법 사용(소문자)
printf("%E\n", 1.2f);    // 1.200000E+00: 실수 지수 표기법 사용(대문자)
printf("%g\n", 1.2f);    // 1.2: %f와 %e 중에서 짧은 것을 사용(소문자)
printf("%G\n", 1.2f);    // 1.2: %F와 %E 중에서 짧은 것을 사용(대문자)
printf("%a\n", 1.2f);    // 0x1.3333340000000p+0: 실수를 16진법으로 표기(소문자)
printf("%A\n", 1.2f);    // 0X1.3333340000000P+0: 실수를 16진법으로 표기(대문자)

printf("%Lf", LDBL_MAX);    // 생략: long double
printf("%Le", LDBL_MAX);    // 1.797693e+308: long double

// 문자, 문자열
printf("%c\n", 'a');    // a: 문자
printf("%s\n", "Hello, world!");    // Hello, world!: 문자열

// 포인터
int num1;
void *ptr = &num1;
printf("%p\n", ptr);    // 008BFB6C: 포인터의 메모리 주소
                        // 0x8bfb6c: 리눅스, OS X에서는 앞에 0x가 붙고, A~F는 소문자로 출력
                        // 높은 자릿수의 0은 생략

// % 기호
printf("%%\n");    // %: % 기호 출력
  • 폭 지정
printf("%6d\n", 20);      // %d의 출력 폭을 6칸으로 지정
printf("%6d\n", 2000);    // %d의 출력 폭을 6칸으로 지정

^^^^20 : 숫자 20 앞에 space 4개
^^2000 : 숫자 2000 앞에 space 2개

  • 폭과 플래그
printf("%06d\n", 20);      // 출력 폭을 6칸으로 지정, 남는 공간은 0으로 채움
printf("%06d\n", 2000);    // 출력 폭을 6칸으로 지정, 남는 공간은 0으로 채움

000020 : 0이 4개 채워진다.
002000 : 0이 2개 채워진다.

printf("% d\n", 10);     // 양수일 때는 부호를 출력하지 않고 공백으로 표시
printf("% d\n", -10);    // 음수일 때는 - 부호를 출력

printf("%+d\n", 200);    // 양수일 때는 + 부호 출력
printf("%+d\n", -200);   // 음수일 때는 - 부호 출력

^10 : 부호 없이 공백으로 처리
-10 : - 부호 출력
+200 : + 부호 출력
-200 : - 부호 출력

  • 실수
printf("%.2f\n", 1.2f);    // 소수 둘째 자리까지 출력
printf("%.2e\n", 1.2f);    // 소수 둘째 자리까지 출력

1.20 : 소수점 둘째 자리까지 출력하므로 0하나 출력
1.20e+00 : 마찬가지로 소수점 둘째 자리까지 출력

printf("%010.2f\n", 1.2f);    // 출력 폭은 10칸, 소수 둘째 자리까지 출력, 남는 공간은 0으로 채움
printf("%010.2e\n", 1.2f);    // 출력 폭은 10칸, 소수 둘째 자리까지 출력, 남는 공간은 0으로 채움

0000001.20 : 소수점까지 포함 4자리이므로 남은 6자리를 0으로 출력
001.20e+00 : 소수점까지 8자리이므로 남은 2자리를 0으로 출력

  • 진수 출력
printf("%#o\n", 0721);    // 8진수이면 앞에 0을 붙임

printf("%#x\n", 0xf1);    // 16진수 소문자 출력이면 앞에 0x를 붙임
printf("%#X\n", 0xf1);    // 16진수 대문자 출력이면 앞에 0X를 붙임

0721 : 8진수는 0
0xf1 : 16진수 소문자는 0x
0XF1 : 16진수 대문자는 0X

  • 문자열
printf("%20c\n", 'a');                // 출력 폭을 20칸으로 지정
printf("%20s\n", "Hello, world!");    // 출력 폭을 20칸으로 지정

^^^^^^^^^^^^^^^^^^a : 19칸을 공백으로 처리
^^^^^^Hello, world! : 문자열 14칸을 제외한 6칸을 공백으로 처리

출처 : https://dojang.io/mod/page/view.php?id=736

profile
늦게 출발했지만 꾸준히 달려서 도착지점에 무사히 도달하자

0개의 댓글