12-2-다.sprintf

sprintf 함수는 printf 함수와 유사한 함수이다. 일단 원형을 보자.

 

int sprintf(char *buffer,const char *format , ...);

 

printf 함수의 원형과 비교해 볼 때 첫 번째 인수 buffer가 추가되어 있다는 점만 다르다. 그외 사용하는 방법이나 %d, %f 등의 서식은 prinf 함수와 동일하다. printf는 서식화된 출력을 화면으로 내 보내는데 비해 sprintf 함수는 첫 번째 인수로 전달된 buffer 배열로 보낸다는 점이 다르다. 이 함수로 서식화된 문자열을 조립한 후 화면으로 그대로 출력할 수도 있고 파일로도 출력할 수 있으며 그래픽 화면으로도 출력할 수 있다.

sprintf 함수는 서식화된 출력을 문자열로 작성하는 것이 원래의 목적이지만 수치값을 문자열 형태로 변환할 때도 사용할 수 있다. %d 서식을 사용하면 정수를 문자열로 바꿀 수 있고 %f 서식을 사용하면 실수를 문자열로 바꿀 수도 있다. 뿐만 아니라 폭이나 유효 자리수 지정 등의 복잡한 서식까지 활용할 수 있으므로 전문 변환 함수보다 상세한 지정이 가능하다. 다음 예제를 보자.

 

: sprintf

#include <Turboc.h>

 

void main(void)

{

     char str[128];

     int i=123;

     double d=3.1415;

 

     sprintf(str,"%d",i);

     printf("정수를 문자열로 : %s\n",str);

     sprintf(str,"%.2f",d);

     printf("실수를 문자열로 : %s\n",str);

     sprintf(str,"%e",d);

     printf("실수를 부동 소수점 형식의 문자열로 : %s\n",str);

}

 

정수형 변수 i와 실수형 변수 d를 sprintf 함수와 %d, %f 서식을 사용하여 문자열로 출력했는데 결과적으로는 문자열 형태로 변환한 것이다. 실행 결과는 다음과 같다.

 

정수를 문자열로 : 123

실수를 문자열로 : 3.14

실수를 부동 소수점 형식의 문자열로 : 3.141500e+000

 

정수형 변수 i를 %d 서식으로 받아 str로 출력하면 i의 값이 문자열 str로 변환되는 효과가 있다. 마찬가지로 실수형 변수 d를 %f 서식으로 받으면 실수가 문자열로 변환되며 %e 서식으로 받으면 부동 소수점 형식으로 변환할 수도 있다. 뿐만 아니라 %와 f사이에 총자리수나 유효 자리수 등을 지정할 수 있으므로 일반적인 문자열 변환 함수보다 훨씬 더 기능이 많다. %.2f 서식을 사용하면 소수점 이하 두자리까지만 그것도 반올림까지해서 문자열로 변환한다.

sprintf 함수 하나만 있어도 대부분의 수치를 문자열로 바꿀 수 있는 셈이다. 서식의 정확한 사용법이 조금 복잡하지만 이미 printf에 익숙하다면 기존 지식을 활용하여 직관적인 방법으로 변환할 수 있어 편리하다. 그러나 이 함수에도 단점이 있는데 너무 덩치가 커서 실행 파일이 커진다는 것과 속도가 느리다는 점이다. 서식이 워낙 다양하고 복잡하기 때문에 아무래도 itoa, gcvt같은 전용 변환 함수보다는 크기가 클 수밖에 없다.

 

 HangMan

숨겨진 영어 단어를 맞추는 게임이다. 몇 개의 단어 목록을 작성하고 난수로 단어를 선택한 후 사용자가 입력한 문자가 단어의 어떤 위치에 있는지 보여준다. 사용자는 임의의 문자를 입력해 보고 컴퓨터가 보여주는 문자의 위치를 참조하여 가장 적은 회수만에 숨겨진 단어를 찾아야 한다. 7회 이상 틀린 글자를 입력할 경우 단어를 맞추지 못한 것으로 처리한다. 영문자만 입력받아야 하며 이미 찾았거나 한 번 틀린 문자는 입력을 거부해야 한다.