티스토리 뷰
printf의 기본 사용법을 요약한 페이지입니다. https://alvinalexander.com/programming/printf-format-cheat-sheet
일반적인 문장은 다음과 같이 생겼습니다. 여기서 %s와 %d 문자의 의미는 무엇일까요?
printf("the %s jumped over the %s, %d times", "cow", "moon", 2);
숫자를 출력하는 넓이 조정하기
%3d라는 표시는 정수에 대해 세칸의 넓이로 출력하라는 의미입니다. 기본적으로는 오른쪽 정렬을 디폴트로 합니다. 세 칸을 넘어가는 숫자가 오면 오른쪽으로 더 나가게 됩니다. 전체 넓이를 정해진 크기에 맞추고 앞에 남는 크기만큼 빈칸을 채웁니다.
printf("%3d", 0); | . . 0 | 세 칸에 맞춰 오른쪽 정렬, 앞은 빈칸 |
printf("%3d", 123456789); | 123456789 | 값이 세칸보다 크면 그대로 출력 |
printf("%3d", -10); | -10 | 음수인 경우 부호를 넣고 세칸으로 출력 |
printf("%3d", -123456789); | -123456789 | 위와 동일 |
정수를 왼쪽 정렬로 출력하기
왼쪽 정렬로 출력하기 위해서는 %-로 뒤에 - 표시를 넣습니다. 뒤에 빈칸으로 넓이만큼을 채웁니다. 숫자가 지정한 자리수보다 길면 오른쪽으로 넘어가게 그대로 출력됩니다.
printf("%-3d", 0); | 0 . . | 좌측 정렬하는데 세 칸을 맞춤 (뒤에 빈칸) |
printf("%-3d", 123456789); | 123456789 | 좌측 정렬하는데 더 길면 그냥 출력함 |
printf("%-3d", -10); | -10 | 위와 동일 |
printf("%-3d", -123456789); | -123456789 | 위와 동일 |
0으로 빈 칸을 채우는 출력 방법
정수를 출력하면서 빈칸을 0으로 채우는 방법은 %0처럼 % 뒤에 0을 넣습니다. 넓이를 채우기 위해 빈칸 대신 0으로 채웁니다.
printf("%03d", 0); | 000 | 세자리로 출력하되 앞을 0으로 채움 |
printf("%03d", 1); | 001 | 1대신 001을 출력 |
printf("%03d", 123456789); | 123456789 | 넓이보다 자리수가 크면 그대로 출력 |
printf("%03d", -10); | -10 | 위와 동일 |
printf("%03d", -123456789); | -123456789 | 위와 동일 |
정수를 포매팅하는 방법
위에서 살펴본 정수 포매팅 방법을 정리하기 위해 몇 가지 예제를 살펴봅니다. 넓이와 정렬과 채우기 등 몇 가지 옵션을 같이 사용했을 때 어떤 결과가 나오는지 보여줍니다. 포매팅 지정자에서 + 표시는 양수에 대해 부호를 붙이라는 의미입니다. (음수는 당연히 - 표시를 해줍니다. 전체 넓이는 부호 표시까지 포함해서 빈칸을 채웁니다)
넓이를 최소 5칸으로 출력(우측정렬) | printf("'%5d'", 10); | . . . 10 |
넓이를 최소 5칸으로 출력(좌측정렬) | printf("'%-5d'", 10); | 10 . . . |
넓이를 최소 5칸으로 0으로 채워서 출력 | printf("'%05d'", 10); | 00010 |
넓이를 최소 5칸으로 + 부호를 붙인다 | printf("'%+5d'", 10); | . . +10 |
넓이를 최소 5칸으로 좌측정렬, 부호 | printf("'%-+5d'", 10); | +10 . . |
마지막 예처럼 부호도 붙이고 우측 정렬 하려면 %-+5d처럼 써주면 됩니다.
%+05d 는 5자리를 채우되 우측 정렬하면서 + 부호를 붙이고 앞의 빈칸은 0으로 채우라는 뜻입니다.
소수점수 출력하기
소수점 수를 출력하는 몇가지 예를 보여줍니다. 소수점 수에서는 넓이를 두가지로 표시합니다. 전체 넓이와 소수점 이하의 자리수입니다. 예를 들어 10.3은 전체는 최소 10칸이고 소수점 이하는 3자리임을 나타냅니다. 즉 소수점 위는 최소 6자리가 되겠지요?
소수점 이하는 한 자리만 | printf("'%.1f'", 10.3456); | 10.3 |
소수점 이하는 두 자리로 | printf("'%.2f'", 10.3456); | 10.35 |
전체 8칸이고 소수점 이하 두 자리로 | printf("'%8.2f'", 10.3456); | . . .10.35 |
전체 8칸이고 소수점 이하 네 자리로 | printf("'%8.4f'", 10.3456); | .10.3456 |
전체 8칸이고 소수점 이하 두 자리로 하 고 앞은 0으로 채운다 |
printf("'%08.2f'", 10.3456); | 00010.35 |
전체 8칸이고 소수점 이하 두 자리로 하 고 좌측 정렬한다 (뒤에 . . . 빈칸표시) |
printf("'%-8.2f'", 10.3456); | 10.35 . . . |
넓이보다 더 긴 숫자인 경우 그냥 빈칸없 이 출력한다 |
printf("'%-8.2f'", 101234567.3456); | 101234567.35 |
문자열 출력하기
문자열도 전체 넓이를 표시할 수 있고 좌측 또는 우측 정렬을 지정할 수 있습니다.
단순히 문자열만 출력 | printf("'%s'", "Hello"); | Hello |
문자열을 최소 길이와 함께 출력 | printf("'%10s'", "Hello"); | . . . . .Hello |
문자열을 최소 길이와 함께 좌측 정렬로 출력 | printf("'%-10s'", "Hello"); | Hello . . . . . |
특수 문자 출력하기
다음은 특수한 의미를 가지는 문자를 출력하는 방법입니다. 숫자나 문자가 아닌 것들을 화면에 출력하는 방법입니다.
\a | 알림 소리(삐) |
\b | 뒤로 한칸 이동 |
\n | 줄바꿈 |
\r | 캐리지리턴 |
\t | 탭 (문서 작성에서 탭과 같은 역할, 일정 위치까지 건너뜀) |
\\ | 백슬래시 (그냥 백슬래시는 특수문자 의미므로 두번써야됨) |
줄바꿈은 다음줄로 넘어가라는 뜻이고 캐리지리턴은 줄의 제일 앞으로 옮기라(타자기에서 쓰던 개념)는 의미입니다. 보통은 \n만으로 줄바꿈을 표시합니다. 윈도우 환경에서 생성된 파일에는 \r\n이 사용됩니다.
단어 가운데 탭을 넣음 | printf("Hello\tworld"); | Hello world |
단어 가운데 줄바꿈을 넣음 | printf("Hello\nworld"); | Hello world |
출력 뒤에 줄바꿈을 넣음 | printf("Hello world\n"); | Hello world |
백슬래시를 출력하기 위해 \\ 사용 | printf("C:\\Windows\\System32\\"); | C:\Windows\System32\ |
printf 포매팅 방법은 많은 언어에서 동일한 방식으로 사용됩니다. 예를 들면 C, C++, Java, Perl, PHP, Ruby, Scala등이 다 비슷한 개념으로 출력 또는 문자열을 포매팅하게 됩니다. 잘 알아두면 매우 유용한 기법입니다.
https://alvinalexander.com/programming/printf-format-cheat-sheet
'C 프로그래밍기초' 카테고리의 다른 글
진짜 이차원배열처럼 malloc하는 방법 (0) | 2020.03.14 |
---|---|
C 포인터 (1) - 개요 (0) | 2020.02.11 |
구조체란 무엇인가? (0) | 2020.02.11 |
C from Python - step 1 (0) | 2019.12.25 |
- Total
- Today
- Yesterday
- comparable
- zip
- python exercise
- rust
- python example
- 이터레이터
- ToString
- 콜렉션
- APPEND
- follow
- max
- 동적바인딩
- 스트링 +
- contentEquals
- format
- Lazy evaluation
- contains
- 자바regex
- 스트링
- Iterator
- typedef
- 패턴
- 이터러블
- CompareTo
- Camel Style
- C++ 클래스
- indexof
- 지연계산
- sort key
- TypeError
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |