C 언어에서 printf() 함수는 일반적으로 텍스트와 변수 값을 함께 출력할 때 사용됩니다. 그런데 출력하려는 문장에 % 기호 자체를 포함시키려면 특별한 주의가 필요합니다. 형식 문자열 안에서 %는 %d, %s 같은 서식 지정자의 시작을 알리는 특수 문자로 해석되기 때문입니다.
따라서 %를 문자열이나 텍스트 그대로 출력하려면 '%%'처럼 두 번 연속해서 작성해야 합니다. % 하나만 단독으로 사용하면 아무것도 출력되지 않으며, 컴파일러에 따라 오류나 경고조차 나타나지 않는 미정의 동작(undefined behavior)이 발생할 수 있습니다.
기본 예제
다음은 C 언어의 printf()에서 %를 출력하는 가장 기본적인 예제입니다.
#include<stdio.h>
int main() {
printf("%"); // 아무것도 출력되지 않음
printf("%%"); // % 출력
getchar();
return 0;
}
실행 결과
%
위 예제에서 첫 번째 printf("%")는 아무것도 출력하지 않고, 두 번째 printf("%%")만 %를 정상적으로 화면에 출력합니다.
%를 출력하는 다양한 방법
% 기호를 출력하는 방법은 '%%' 외에도 여러 가지가 있습니다. 다음 예제를 통해 각각의 방법을 확인해 보겠습니다.
#include<stdio.h>
#include<string.h>
int main() {
// 방법 1: %% 이스케이프 시퀀스 사용
printf("%%\n");
// 방법 2: %c 서식 지정자에 문자 인수 전달
printf("%c\n", '%');
// 방법 3: %s 서식 지정자에 문자열 인수 전달
printf("%s\n", "%");
// 방법 4: 문자 배열에 저장한 후 출력
char a[5];
strcpy(a, "%%");
printf("a의 값: %s\n", a);
return 0;
}
실행 결과
%
%
%
a의 값: %%
정리
- %% : 형식 문자열 내에서 리터럴 %를 출력하는 가장 표준적이고 권장되는 방법입니다.
- %c : 문자 상수
'%'를 인수로 전달하여 출력할 수 있습니다. - %s : 문자열
"%"를 인수로 전달하여 출력할 수 있습니다. - 단일 % : 형식 문자열에 % 하나만 쓰면 미정의 동작이 발생할 수 있으므로 반드시 피해야 합니다.