본문 바로가기

프로그래밍/C Lang

-C언어 강좌 10 :: 표준출력함수 - printf -


     10. 표준출력함수 :: printf



Contents

§ 함수의 정보가 담긴 헤더파일
§ 표준출력함수 printf
┌ 서식문자
└ 특수문자




§ 함수의 정보가 담긴 헤더파일


함수를 사용하기 위해서는 일단 프로그램에 함수가 정의된 상태여야 합니다. 그런데 우리가 printf함수를 사용할 때 어디에도 함수에 대한 정의는 찾아볼 수 없습니다. 그 이유는 소스파일 맨 윗부분에 작성한 #include <stdio.h> 덕분입니다. 이 코드는 전처리문이라고 불리는 특수한 코드이며 전처리기에게 "stdio.h의 파일 내용을 소스파일에 복사하라"라는 명령을 내립니다. 바로 이 stdio.h 파일에 printf함수에 대한 정보가 담겨져 있기 때문에 함수를 사용하는 데에 문제가 없었던 것입니다.


실제로 printf함수의 정보가 stdio.h파일에 담겨있는지 확인하려면 아래와 같이 printf 이름을 한번 클릭하고 F12 키를 눌러보면 됩니다. 그러면 stdio.h파일이 열리며 printf함수에 대한 정의를 보여줍니다.





stdio.h 파일에는 printf함수 외에도 scanf함수와 같은 표준 입출력에 관한 함수들이 정의되어 있습니다.





§ 표준출력함수 printf


printf함수는 c언어의 표준 출력 함수이며 stdio.h파일에 정의되어 있습니다. 함수 호출시에 전달된 인수들을 적절히 가공하여 콘솔창에 출력해주는 역할을 합니다. 다음은 printf함수를 사용한 간단한 예입니다.


 int num = 10;

 printf("num is %d\n",num);


printf함수는 서식이라는 특수한 형태의 문자열을 받습니다. 이 서식에는 서식문자가 들어갈 수 있으며 서식문자는 그대로 출력되는 것이 아닌, 추가적으로 전달되는 인수와 대체되어 출력됩니다. 위에서 사용된 %d가 서식문자입니다.


서식문자를 서식에서 사용하게 되면 다음과 같이 순서대로 추가적으로 전달되는 인수와 대체됩니다.


 int x = 10

 int y = 20

 printf("x is %d, y is %d\n",x,y);




ㆍ서식문자


서식문자는 추가적으로 전달되는 인수와 대체되며 그 값의 형태를 정해줍니다. 예를 들어 %d는 대응되는 값을 int형 정수로 변환시켜 출력하며 %f는 대응되는 값을 double형 실수로 변환시켜 출력합니다. 이외에도 대응되는 값을 어떤 방식으로 출력할 것인가에 따라 여러 서식문자들이 정의되어 있습니다.



위 서식문자들 중에서 자주쓰이는 것은 %d %f %c %s %p 정도입니다. 그 외의 것들은 쓸 필요가 있을 때 찾아쓰는 것이 좋습니다.


서식문자의 출력형태와 출력하는 대상의 자료형이 일치하지 않으면 형변환이 일어나게 됩니다. 이 과정에서 출력 결괏값이 손상될 수 있습니다.


 float x = 3.5;

 printf("%d\n",x);


의도하는게 아니라면 출력대상과 출력형태의 자료형을 맞춰주는 것이 좋습니다. 그렇지 않으면 원하는 결괏값이 출력되지 않을 수 있기 때문입니다.




ㆍ특수문자


컴퓨터에서 특별한 의미를 갖는 문자를 특수문자라고 합니다. 지금까지 사용해왔던 \n도 특수문자중 하나입니다. 특수문자들은 대체로 보이지 않는 것들을 정의하기위해 생겨났습니다. 문자열 개행을 의미하는 \n가 대표적인 예입니다.



특수문자또한 종류는 다양하지만 실제로 사용되는 것은 \n \t \\ \' \" 정도입니다. 특히 \" 같은 경우는 문자열 내부에 문장을 넣을 때 자주 사용됩니다. 예를 들어 he said "i love you" 라는 문자열을 출력하기 위해선 다음과 같이 적어주어야합니다.


 printf("He said \" I love you\"\n");


그렇지 않고 he said " I love you"를 그대로 printf함수에 적어주면 다음과 같은 오류가 발생합니다.


 printf("He said " I love you"\n");


c언어 문법상 문자열은 큰 따옴표 두개로 표현이 됩니다. 때문에 앞의 큰 따옴표 2개로 문자열 하나가 인식되고 뒷 부분은 처리할 수 없게 되는 것입니다.







Exercise..!


 #include <stdio.h>


 int main()

 {

 int x = 10;

 int y = 20;


 printf("%d + %d = %d\n",x ,y ,x+y);


 return 0;

 }


Q. 출력되는 문장은 무엇인가요?




 #include <stdio.h>


 int main()

 {

 float z = 15.5;


 printf("%d\n",z);

 return 0;

 }


Q. 출력되는 값은 무엇인가요? 왜 그런가요?