본문 바로가기

카테고리 없음

[C언어 강좌]표준 입출력함수 -1

이번 강좌에서는 표준 라이브러리에서 제공하는 표준 입출력 함수 printf함수와 scanf함수의 사용법에 대해 알아보겠습니다.


중점적으로 보아야 할 부분

1. printf함수 호출시에 전달되는 인수들의 관계

2. 서식문자와 자료형의 관계

3. 

grid

printf함수와 서식문자


printf도 함수입니다. printf함수는 인수로, 출력할 문자열을 받는데 이 문자열은 서식입니다. 서식(Format)이란, 가공되어진 글을 말하는데, 서식문자를 통해서 서식을 가공하고, printf함수는 가공된 서식을 출력해주는 역할을 합니다.

말이 좀 어렵게 느껴질 수도 있는데, 글로 설명하려고 하니까 그렇게 된거고 실제로 보면 별거없습니다.

간단한 예제를 통해 printf함수의 인수로 전달 될 서식을 작성해 봅시다.


/* print01.c */


#include <stdio.h>


int main( )

{

int x = 10;

int y = 10;


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

return 0;

}


printf함수에 전달되는 인수들은 어떤 원리를 통해 서식을 형성하는지 그림을 통해 알아봅시다.



서식문자들은 앞에 '%'기호가 붙습니다. 위에서는 '%d'라는 서식문자가 2번 쓰였네요. 이 서식문자들은 보이는 모습 그대로 출력되지 않고, 추가로 전달되는 인수들의 정보를 가공한 후에 그 값과 치환됩니다. 위의 코드에서 서식문자는 2번 쓰였기 때문에 추가로 전달되는 값은 2개입니다. 결과적으로 콘솔창에는 "x is 10, y is 10" 이라는 문장이 출력되게 됩니다.


서식문자의 종류


서식문자 종류가 굉장히 많은데 , 암기할 필요는 없습니다. 그냥 이런게 있다라는 것만 알아두시고, 필요할 때에 가져다가 쓰면됩니다. 



또한 이  많은 서식문자들중에서 자주 사용하는 것도 제한적입니다. 보통 콘솔프로그램을 제작할때 자주쓰는 서식문자들은 5개입니다.


%d 정수 %f 실수 %c 문자 %s 문자열 %p 메모리주소


자주쓰기때문에 알아두면 좋습니다. 나머지 것들은 필요할 때마다 찾아서 사용하면 됩니다.


위에 적힌 자료형에 대해  착각을 할 수가 있는데, %d가 나타내는 자료형이 int라고 해서 int형 자료만 받을 수 있다는게 아닙니다. 어떠한 자료가 와도 int형으로 해석하겠다는 뜻이지, 특정한 자료를 요구하는게 아니라는 겁니다. 즉 %d에 float형을 받을 수도 있다는거죠. 가능은 하지만 의도하지 않는이상 그렇게 사용하지는 않습니다. 아래 예제를 보세요.


/* print02.c */


#include <stdio.h>


int main( )

{

float x = 3.5;


printf("x is %d \n", x );            //%d에 대응하는 자료형을 float형으로 주었다.

return 0;

}


/* 실행결과 */


x is 3

계속하려면 아무 키나 누르십시오 . . .


분명 x의 값은 3.5인데 3으로 출력되고 있습니다. 왜 그럴까요? printf 함수의 내부에서는 아래와 같은 가공과정을 거치기 때문입니다.



변수 x가 인수로 들어가면, %d의 형식에 맞게 int형으로 형변환이 되고, %d와 치환이 됩니다.

형변환이 일어나는 과정에서 소숫점이하부분이 손실되게 됩니다. 이처럼 정수출력을 맡는 %d에 실수가 전달될 수 있지만, 그 과정에서 메모리 손실의 가능성이 있기 때문에 서식문자가 요구하는 형에 맡게 주는 편이 좋습니다.



서식 문자열의 예약된 문자들


우리가 그동안 사용하던 \n의 정체에 대해 알아보겠습니다. 출력할 문자열에 \n이라는 단어를 넣었는데 \n은 출력되지 않습니다. 왜일까요? 이미 예약되어 있는 특별한 문자이기 때문입니다. 콘솔화면에 출력을 담당하고 있는 출력장치는 \n라는 문자를 만나게 되면, 개행을 시켜버립니다. 쉽게 말해서 enter키를 입력하는거죠. 이렇게 출력장치에서 특별한 의미를 지니는 문자들이 꽤 있습니다.