코딩 노트

06-1 printf 함수 이야기 본문

C

06-1 printf 함수 이야기

newbyeol 2021. 5. 6. 20:06

printf함수는 문자열을 출력하는 함수이다. C언어는 큰 따옴표를 사용해서 문자열을 표현하는데, 문자열에 \n이 삽입이 되어있는 경우가 있다. 이를 '특수문자'라고 한다. 문자열에 포함이 되는 특수문자는 작은 따옴표로 묶어서 독립된 문자상수로도 존재할 수 있다. 그렇다면 '특수문자', 혹은 '이스케이프 시퀀스(escape sequence)'라 불리는 문자들이 필요한 이유는 무엇일까? 

이러한 유형의 문제 해결을 위해 특수문자가 존재하는 것이다.

참고로 /f와 /v는 모니터 출력이 아닌 프린터 출력을 위해 정의된 특수문자이기 때문에 모니터의 출력에 사용을 하면, 이상한 문자가 출력된다. 즉, 모니터 출력에서는 별 의미가 없는 특수문자들이다.

1. printf 함수의 서식지정

printf의 f는 formatted(서식이 지정된)을 의미한다. 따라서 printf라는 함수의 이름에는 '서식이 지정된 형태의 출력'이라는 뜻이 담겨져 있다. 이 말은 '출력 양식이 만들어진 상태에서 출력을 진행한다'는 뜻이다. 따라서 printf 함수를 이용하면, 문자열 안에 정수나 실수를 포함해서 출력하는 등의 출력양식을 직접 지정할 수 있다.

첫 번째 인자로 우리가 지정한 서식화된 문자열을 전달하고 있다. 그 문자열 안에는 두 개의 서식문자가 포함되어 있는데 이 둘에 대한 출력대상이 바로 두 번째 인자와 세 번째 인자를 통해서 전달 된다. 즉, 첫 번째 서식문자의 출력대상이 두 번째 인자를 통해서 전달되며, 두 번째 서식문자의 출력대상이 세 번째 인자를 통해서 전달된다.

2. 정수의 출력을 위한 서식문자들: %d, %u, %o, %x

8진수와 16진수의 출력에 사용되는 %o와 %x를 이용해서는 양의 정수만 출력이 가능하다. 따라서 음의 정수를 출력하려면 반드시 %d를 사용해야 한다. 참고로 8진수와 16진수는 음의 정수 표현에 거의 사용되지 않는 표현법이다. 따라서 서식문자에서도 양의 정수만 출력이 가능하도록 제한하고 있다. 그리고 8진수를 8진수답게, 16진수를 16진수답게 출력하고 싶다면, 서식문자 %o 그리고 서식문자 %x의 사이에 #을 넣어서 %#o와 %#x를 이용해서 출력하면 된다. 

 

위 예제에서 보이듯이, 16진수로 출력할 경우 출력된 내용이 16진수 정보임을 알리기 위해서 가급적 서식문자에 #을 포함시켜서 출력하는 것이 좋다.

 

3. 실수의 출력을 위한 서식문자들: %f, %e, %g

%e와 %E의 차이점은 e 표기법에 사용되는 문자 e를 소문자로 표현하느냐 대문자로 표현하느냐에 있다.

 

%g는 소수점 이하의 자릿수가 늘어나면 e표기법으로 출력을 한다. 3.14와 같이 간단한 실수라면 %f로 출력하는 것이 수의 크기를 파악하기에 좋을 것이고, 0.0000025와 같이 소수점 이하의 자릿수가 긴 실수라면 %e로 출력하는 것이 수의 크기를 파악하기에 좋을 것이다. 서식문자 %g는 실수의 형태에 따라서 %f와 %e 사이에서 적절한 형태의 출력을 진행한다.

 

%s에서의 s는 string의 약자로서 문자열의 출력을 지시하기 위한 서식문자에 사용된다. 깊이 있는 부분까지 언급하기에는 아직 알고 있는 문자열이 많이 없기 때문에 깊이 있는 이해를 위한 설명은 배열과 포인터에서 진행하겠다.

위 예제에서 보여주는 서식문자 %s의 활용방법을 기억하자.

4. 필드 폭을 지정하여 정돈된 출력 보이기

서식문자에는 출력의 필드 폭을 지정하는 옵션을 추가할 수 있다. printf 함수는 명령 프롬프트 상에 출력하기 때문에, 보기 좋은 출력을 위해서 필드의 폭을 지정하는 것도 필요하다.