본문 바로가기

programming/문제 해결

[C언어, C++] '%' 문자 출력 - (서식문자)

반응형

1. 개요

 

 이 문제는 백준 알고리즘 4344번을 풀면서 겪은 문제이다. 문제를 풀기 위해선 '%' 문자를 cmd창을 활용하여 출력해야 했는데, printf("") 함수 안에 %을 넣는 방식으로는 출력되지 않았다. 다음은 자세한 설명이다.

 

2. 문제

 

 나는 cmd창에 40.000% 라는 문자열을 출력해야 했다. 그래서 다음과 같이 코드를 작성하였다.

#include <stdio.h>

int main(void) {

	printf("40.000%");
	return 0;

}

 그러나 위와 같이 코드를 작성하면 다음과 같이 출력된다.


40.000


'%' 가 출력되지 않은 것이다. 그래서 내가 사용한 방법은 이스케이프 시퀀스 문자를 출력하고 싶을 때 사용하는 방법인, 앞에 \를 넣는 방법이다. 그래서 다음과 같이 코드를 짜봐았다.

#include <stdio.h>

int main(void) {

	printf("40.000\%");
	return 0;

}

 그러나 이렇게 해도, 문제는 해결되지 않았다...... 마지막으로 내가 사용한 방법은 서식 지정자를 사용하는 것이었다. '%' 문자가 들어가야할 자리에 서식 지정자를 놓고, 그 서식 지정자의 값으로 '%'을 넣어주는 것이다. 다음은 내가 작성한 코드이다.

#include <stdio.h>

int main(void) {

	printf("40.000%c",'%');
	return 0;

}

 이렇게 하니까, 다행이도 원하는 결과를 얻을 수 있었다. 내가 생긴 궁금증은 왜 %는 출력되지 않느냐 였다. 구글링을 통해 나름 자료를 찾아보았다. printf() 함수의 원형은 0개 이상의 지시문으로 구성되어 있는데, %를 제외한 일반 문자는 그대로 출력된다고 한다. 다시 말하면 %는 그대로 출력되지 않는것이다. 그리고 %이 출력되지 않아도, 아무 에러 메세지를 띄우지 않는다는 것이다. 위에 방법처럼 서식문자를 활용한 해결방안도 있지만 문법적으로 해결할 수 있는 방법도 있다. 다음은 문법적으로 '%'를 출력하는 방법이다.

#include <stdio.h>

int main(void) {

	printf("40.000%%");
	return 0;

}

위와 같이 '%' 문자 앞에 '%' 를 한번 더 써준다면, 출력할 수 있다. 결과만 정리하자면 다음과 같다.


printf() 함수에서 %를 출력하는 방법

 

1. 서식문자 활용

#include <stdio.h>

int main(void) {

	printf("40.000%c",'%');
	return 0;

}

 

2. %를 두번 사용

#include <stdio.h>

int main(void) {

	printf("40.000%%");
	return 0;

}

 

3. 결어

 

 사실 이번에 올리는 글은 아쉬운 마음이 조금 있다. 왜냐하면 '%' 문자의 의미를 완벽하게 이해하지 못했기 때문이다. 그냥 'printf()안에서 %문자는 그대로 출력되지 않는다.' 라는 펙트만을 알아낸 것이기 때문이다. 추가적으로 이 부분을 보완한 글을 올릴 수 있으면 좋겠다.

반응형