글수 49
#06.초보가 쓰는 C 언어 강좌
(간단한 입출력)
06.01 printf 함수에 대해
printf 함수는 그전에 설명도 없이 많이 사용했습니다. 이 설명도 없이 사용했던 이유는 뭐가 보여야지, 프로그램이 잘 돌아가구나 하는 확신이 생기기 때문입니다.
printf 가장 기본적인 출력문입니다. printf 함수는 stdio.h 에 있습니다. 따라서 사용하기전 #include <stdio.h> 라고 적어 주셔야 합니다.
printf 의 원형은 int printf(const char* format, ...); 입니다. 함수원형을 함수를 어떻게 이용할 수 있는지에 대한 정보를 알려줍니다. 함수원형은 나중에 함수에 대해 설명할 때 자세히 설명하겠습니다. 잠깐 설명하면 끝에 ... 이라고 해서 점이 3개 붙는 것을 볼 수 있습니다. 이 부분은 0개 이상이 들어 ,(콤마)로 구별될 수 있다는 뜻입니다. 따라서, 문자열 하나로 끝나도 되고, 그 이상으로 끝나도 된다는 뜻입니다. (모르겠으면 그냥 패스 하세요..)
--------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Hello, world");
system("PAUSE");
return 0;
}
--------------------------------------------------------------------------
처음에 보았던 Hello, world 라는 문자를 찍는 프로그램 입니다. printf 함수는 기본적으로 문자열을 찍는 역할을 합니다.
06.02 printf 의 형식(format)
앞의 예제에서는 문자를 찍었지만, printf 의 본 뜻은 형식 (format) 을 가지고 출력한다(print) 라는 의미가 있습니다. 그래서 print 라는 문자뒤에 f 라는 약자가 하나 붙었습니다.
--------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("%d",1234);
system("PAUSE");
return 0;
}
--------------------------------------------------------------------------
이 예제는 1234 라는 값을 찍습니다. % 다음에 나타나는 문자는 어떤 형식으로 출력할 것인지 나타냅니다.
몇 가지 형식입니다.
%c : 한 문자 , c 는 character 를 나타냅니다.
%s : 문자열을 찍을 때 , s 는 string 을 나타냅니다.
%d : 정수형, 10 진수로 표현합니다. d 는 decimal 을 나타냅니다.
%x (소문자): 정수형, 16진수로 출력합니다. 16진수를 사용할 때 abcdef 같이
소문자를 이용하여 출력합니다. Hex 에서 마지막 x 를 이용한 것
같군요.(문자 h 는 다른 용도로 사용합니다.) (더 자세히 하면 부호
없는 unsinged 정수입니다.)
%X (대문자): 정수형, 16진수로 출력합니다. 16진수를 사용할 때 ABCDEF 같이 대문자
를 이용하여 출력합니다. (부호 없는 정수)
%o : 정수형, 8진수로 출력합니다. o 는 octal 의 약자입니다.
%e : 실수형. 지수형으로 출력합니다.
%f : 실수형, 우리가 보통 사용하는 0의 자리에 소수점을 이용하는 표현방식으로
나타냅니다.
%Lf : 실수형, 변수를 long double 을 사용했을 때 사용합니다.
%g : 실수형. 값에 따라 %e 와 %f 를 자동적으로 출력해 줍니다.
%% : %라는 문자를 찍을 수 있게합니다. %라는 문자가 특수한 용도로 사용되므로 % 를 두번 사용해 나타냅니다.앞에 나온 \\와 유사해 보이지 않나요..
===========================================================================
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("%c \n", 'A' );
printf("%s \n", "string");
printf("%d \n", 1234);
printf("%o \n\n", 1234);
printf("%e \n",123.45678);
printf("%f \n",123.45678);
printf("%g \n\n",123.45678);
printf("%% \n");
system("PAUSE");
return 0;
}
---------------------------------------------------------------------------
A
string
1234
2322
1.234568e+002
123.456780
123.457
%
===========================================================================
쉽게 이해할 수 있는 내용이라고 봅니다. 이 것 말고도 엉청난 기능이 많습니다. 다 설명하기에는 너무 많아서 이 정도면 충분하다고 봅니다.
예에서 printf("%s \n", "string"); 이라는 것이 있는데, 물론 이 것은 printf("string \n")과 같은 효과를 발생합니다. 뒤에 붙은 값이 상수라서 의미 없어 보일 수는 있지만, 이러한 방식은 두 번째의 문자열이 변수이면 더 큰 위력을 발휘하게 됩니다.
아래 예제는 변수를 이용해서 출력하는 예제 입니다.
===========================================================================
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char ch = 'A';
char string[] = "string"; /* 이 것은 문자열입니다. 배열을 배울 때
자세히 알려드리겠습니다. */
int decimal = 1234;
double f = 123.45678;
printf("%c \n", ch );
printf("%s \n", string);
printf("%d \n", decimal);
printf("%o \n\n", decimal);
printf("%e \n",f);
printf("%f \n",f);
printf("%g \n\n",f);
printf("%% \n");
system("PAUSE");
return 0;
}
------------------------------------------------------------------------
A
string
1234
2322
1.234568e+002
123.456780
123.457
%
===========================================================================
당연한 말이지만, const 가 붙은 기호상수를 이용해 출력하는 것도 가능합니다.
===========================================================================
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
const char ch = 'A';
printf("%c \n", ch );
system("PAUSE");
return 0;
}
===========================================================================
예제가 너무 깉어 하나만 보여 드렀지만 다른 것도 다 가능합니다.
앞에 예에서 printf안에 1개 또는 2개의 내용만 들어가서 그렇게만 사용가능할 거라고 생각할 수 있는데, 다음과 같이 확장가능 합니다.
===========================================================================
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 3;
double d = 5.0;
printf("i = %d , d = %f \n", i,d );
system("PAUSE");
return 0;
}
--------------------------------------------------------------------------
i = 3 , d = 5.000000
===========================================================================
%기호와 변수나 상수를 잘 맞추기만 한다면 얼마든지 출력할 수 있습니다.
더, 복잡한 기능도 있지만, 여기서는 이 정도만 알려드립겠습니다. 더 좋은 기능은 나중에 설명드립겠습니다.
06.03 scanf 함수에 대해
이제 사용자로 부터 입력을 받는 함수에 대해 알아볼까요.
===========================================================================
#include <stdio.h>
#include <stdlib.h>
int main()
{
int value;
printf( "Enter any value \n" );
scanf("%d", &value); /* 주석1) value 라는 변수 앞에 &가 붙는 것 조심*/
printf("입력했던 값은 : %d\n", value);
system("PAUSE");
return 0;
}
===========================================================================
이 프로그램을 실행시키면
Enter any value
라는 글이 나오면서 프롬프트가 깜박거립니다. 이 때 아무 숫자나 입력해 주세요.
그러면 그 값을 출력해 줍니다.
===========================================================================
Enter any value
34566
입력했던 값은 : 34566
계속하려면 아무 키나 누르십시오 . . .
===========================================================================
주석 1)에서 scanf("%d", &value); 라고 변수 앞에 &가 붙었습니다. 이것은 나중에 함수와 포인터를 설명하고 나서 배우게 됩니다. %d 는 이미 출력할 때 본 것입니다. 정수와 관련된 것이겠죠..
scanf 에서 %로 형식을 나타내는 것은 printf 와 거의 동일합니다. 하나만 다릅니다. 소수형에 대해서 printf 는 %f 를 사용했지만 scanf 는 %lf 를 사용합니다. 씨를 많이 한 사람도 이 부분에 대해서는 잘 모르는 것 같더군요. 잘 알아 두세요.
같은 예제를 조금 변경해 보겠습니다. 이번에는 0xff 라고 입력하면 어떻게 될까요. 한 번 해보세요. 그러면 출력은 0 만 나옵니다. 16진수를 받아들일 것 같지만, 0하나만 받아들이고 문자로 보이는 부분(10진법을 기준으로 ff 는 문자로 보이겠죠)을 무시해, 버립니다.
16진수를 받아들일려면 어떻게 해야 할까요. printf 에서 사용했던 %x 를 사용하면 됩니다.
-----------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main()
{
int value;
printf( "Enter any value \n" );
scanf("%x", &value);
printf("입력했던 값은 : %d\n", value);
system("PAUSE");
return 0;
}
-----------------------------------------------------------------------------
ff 라고 입력해보세요(앞에 0x 는 빼고). 그러면 255라는 10진수 값이 나옵니다. 그렇게 어렵지 않습니다. 문자도 받아 들일 수 있습니다.
----------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main()
{
char value;
printf( "Enter any value \n" );
scanf("%c", &value);
printf("입력했던 값은 : %c\n", value);
system("PAUSE");
return 0;
}
----------------------------------------------------------------------------
입력을 받을 때 "%c" 를 이용하고 출력을 할 때도 "%c" 를 사용했습니다.
이번에는 한 번에 두 가지 압력을 받아들이도록 고쳐보겠습니다.
----------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch;
int number;
printf( "Enter any value (ex)a 34 \n" );
scanf("%c %d", &ch , &number );
printf("입력했던 값은 : %c %d \n", ch , number);
system("PAUSE");
return 0;
}
----------------------------------------------------------------------------
값을 입력할 때는 앞에는 문자를 뒤에는 숫자를 입력하돼, 중간에 스패이스를 하나 주어야 합니다.
결과:
Enter any value (ex)a 34
f 255
f 255
계속하려면 아무 키나 누르십시오 . . .
scanf("%c %d", &ch , &number ); 이 부분만 조금 고쳐보면 많은 응용을 할 수 있습니다. scanf("%c,%d", &ch , &number ); 라고 중간에 ,(콤마,쉼표) 를 주게 돠면 두 변수사이에 구분을 쉼표로 하게 됩니다. 그래서 입력할 때 a,34 같이 입력해야 합니다.
scanf 를 사용할 때 주의할점이 하나 있습니다. 앞에서 printf 에서 배운 esacpe 문자를 사용하지 마세요. scanf("%c %d\n" ); 같은 것을 하지 마세요. 절대 하지 마세요. 이유가 궁금한 사람은 한 번 해보세요. (컴퓨터 다운되고 이런 것은 아닙니다.다만 데이터를 제대로 읽지 못해요. 제가 C 언어처음 배울 때 그런거 써 놓고 왜 안되냐고 하면서 C 배우기를 포기한 적이 있어요. 그래서 이렇게 말씀드리는 겁니다.)
요즘 같이 GUI프로그래밍을 많이 하는 시대에 예전 콘솔에서 출력했던 printf와 scanf같은 함수를 사용할 필요가 없다고 생각하는 사람들 있을 것 같습니다. 그러나 출력용이라는 것이 단지 콘솔에만 있는 것이 아니고 파일에 저장하는 방법도 유사한 인수를 사용하는 fprintf 함수나 fscanf 함수를 사용하고 더 나가 버퍼를 사용하는 ssprintf 함수나 sscanf 함수에서도 유용히 사용하고 있으니 이 부분을 잘 알아두세요.
덧 글(덧붙이는 글)
이 글에서 모르는게 너무 많이 나오지는 않습니까? 많이 나올 거라고 생각합니다. 저의 글은 이 글을 처음 읽을 때도 생각하고 있지만, 한 번 쭉 읽고 다시 한 번 읽을 때 어느정도 전체를 알고 있는 사람도 고려해서 글을 쓰고 있습니다. 그래서 처음부터 이 글을 잘 이해 하지 못했다고 해서 너무 걱정하지 마세요. 다시 말하지만 나도 초보인 상태에서 이 글을 쓰고 있으므로 잘 설명하지 못하는 것은 당연합니다. 여러분의 이해력이 나쁜게 아니라, 내 글실력이 없는 것 입니다. 다, 제 탓 입니다.
작성자 : 한밀(승룡)
버전 : 0.1.5
이 글은 계속 고쳐지고 있습니다.
2004년 3월 말, 봄이 찾아온 어느 날.
최종 수정일 : 2008년 2월 말, 2월인데 아직 눈이 내리다니..
(간단한 입출력)
06.01 printf 함수에 대해
printf 함수는 그전에 설명도 없이 많이 사용했습니다. 이 설명도 없이 사용했던 이유는 뭐가 보여야지, 프로그램이 잘 돌아가구나 하는 확신이 생기기 때문입니다.
printf 가장 기본적인 출력문입니다. printf 함수는 stdio.h 에 있습니다. 따라서 사용하기전 #include <stdio.h> 라고 적어 주셔야 합니다.
printf 의 원형은 int printf(const char* format, ...); 입니다. 함수원형을 함수를 어떻게 이용할 수 있는지에 대한 정보를 알려줍니다. 함수원형은 나중에 함수에 대해 설명할 때 자세히 설명하겠습니다. 잠깐 설명하면 끝에 ... 이라고 해서 점이 3개 붙는 것을 볼 수 있습니다. 이 부분은 0개 이상이 들어 ,(콤마)로 구별될 수 있다는 뜻입니다. 따라서, 문자열 하나로 끝나도 되고, 그 이상으로 끝나도 된다는 뜻입니다. (모르겠으면 그냥 패스 하세요..)
--------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Hello, world");
system("PAUSE");
return 0;
}
--------------------------------------------------------------------------
처음에 보았던 Hello, world 라는 문자를 찍는 프로그램 입니다. printf 함수는 기본적으로 문자열을 찍는 역할을 합니다.
06.02 printf 의 형식(format)
앞의 예제에서는 문자를 찍었지만, printf 의 본 뜻은 형식 (format) 을 가지고 출력한다(print) 라는 의미가 있습니다. 그래서 print 라는 문자뒤에 f 라는 약자가 하나 붙었습니다.
--------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("%d",1234);
system("PAUSE");
return 0;
}
--------------------------------------------------------------------------
이 예제는 1234 라는 값을 찍습니다. % 다음에 나타나는 문자는 어떤 형식으로 출력할 것인지 나타냅니다.
몇 가지 형식입니다.
%c : 한 문자 , c 는 character 를 나타냅니다.
%s : 문자열을 찍을 때 , s 는 string 을 나타냅니다.
%d : 정수형, 10 진수로 표현합니다. d 는 decimal 을 나타냅니다.
%x (소문자): 정수형, 16진수로 출력합니다. 16진수를 사용할 때 abcdef 같이
소문자를 이용하여 출력합니다. Hex 에서 마지막 x 를 이용한 것
같군요.(문자 h 는 다른 용도로 사용합니다.) (더 자세히 하면 부호
없는 unsinged 정수입니다.)
%X (대문자): 정수형, 16진수로 출력합니다. 16진수를 사용할 때 ABCDEF 같이 대문자
를 이용하여 출력합니다. (부호 없는 정수)
%o : 정수형, 8진수로 출력합니다. o 는 octal 의 약자입니다.
%e : 실수형. 지수형으로 출력합니다.
%f : 실수형, 우리가 보통 사용하는 0의 자리에 소수점을 이용하는 표현방식으로
나타냅니다.
%Lf : 실수형, 변수를 long double 을 사용했을 때 사용합니다.
%g : 실수형. 값에 따라 %e 와 %f 를 자동적으로 출력해 줍니다.
%% : %라는 문자를 찍을 수 있게합니다. %라는 문자가 특수한 용도로 사용되므로 % 를 두번 사용해 나타냅니다.앞에 나온 \\와 유사해 보이지 않나요..
===========================================================================
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("%c \n", 'A' );
printf("%s \n", "string");
printf("%d \n", 1234);
printf("%o \n\n", 1234);
printf("%e \n",123.45678);
printf("%f \n",123.45678);
printf("%g \n\n",123.45678);
printf("%% \n");
system("PAUSE");
return 0;
}
---------------------------------------------------------------------------
A
string
1234
2322
1.234568e+002
123.456780
123.457
%
===========================================================================
쉽게 이해할 수 있는 내용이라고 봅니다. 이 것 말고도 엉청난 기능이 많습니다. 다 설명하기에는 너무 많아서 이 정도면 충분하다고 봅니다.
예에서 printf("%s \n", "string"); 이라는 것이 있는데, 물론 이 것은 printf("string \n")과 같은 효과를 발생합니다. 뒤에 붙은 값이 상수라서 의미 없어 보일 수는 있지만, 이러한 방식은 두 번째의 문자열이 변수이면 더 큰 위력을 발휘하게 됩니다.
아래 예제는 변수를 이용해서 출력하는 예제 입니다.
===========================================================================
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char ch = 'A';
char string[] = "string"; /* 이 것은 문자열입니다. 배열을 배울 때
자세히 알려드리겠습니다. */
int decimal = 1234;
double f = 123.45678;
printf("%c \n", ch );
printf("%s \n", string);
printf("%d \n", decimal);
printf("%o \n\n", decimal);
printf("%e \n",f);
printf("%f \n",f);
printf("%g \n\n",f);
printf("%% \n");
system("PAUSE");
return 0;
}
------------------------------------------------------------------------
A
string
1234
2322
1.234568e+002
123.456780
123.457
%
===========================================================================
당연한 말이지만, const 가 붙은 기호상수를 이용해 출력하는 것도 가능합니다.
===========================================================================
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
const char ch = 'A';
printf("%c \n", ch );
system("PAUSE");
return 0;
}
===========================================================================
예제가 너무 깉어 하나만 보여 드렀지만 다른 것도 다 가능합니다.
앞에 예에서 printf안에 1개 또는 2개의 내용만 들어가서 그렇게만 사용가능할 거라고 생각할 수 있는데, 다음과 같이 확장가능 합니다.
===========================================================================
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 3;
double d = 5.0;
printf("i = %d , d = %f \n", i,d );
system("PAUSE");
return 0;
}
--------------------------------------------------------------------------
i = 3 , d = 5.000000
===========================================================================
%기호와 변수나 상수를 잘 맞추기만 한다면 얼마든지 출력할 수 있습니다.
더, 복잡한 기능도 있지만, 여기서는 이 정도만 알려드립겠습니다. 더 좋은 기능은 나중에 설명드립겠습니다.
06.03 scanf 함수에 대해
이제 사용자로 부터 입력을 받는 함수에 대해 알아볼까요.
===========================================================================
#include <stdio.h>
#include <stdlib.h>
int main()
{
int value;
printf( "Enter any value \n" );
scanf("%d", &value); /* 주석1) value 라는 변수 앞에 &가 붙는 것 조심*/
printf("입력했던 값은 : %d\n", value);
system("PAUSE");
return 0;
}
===========================================================================
이 프로그램을 실행시키면
Enter any value
라는 글이 나오면서 프롬프트가 깜박거립니다. 이 때 아무 숫자나 입력해 주세요.
그러면 그 값을 출력해 줍니다.
===========================================================================
Enter any value
34566
입력했던 값은 : 34566
계속하려면 아무 키나 누르십시오 . . .
===========================================================================
주석 1)에서 scanf("%d", &value); 라고 변수 앞에 &가 붙었습니다. 이것은 나중에 함수와 포인터를 설명하고 나서 배우게 됩니다. %d 는 이미 출력할 때 본 것입니다. 정수와 관련된 것이겠죠..
scanf 에서 %로 형식을 나타내는 것은 printf 와 거의 동일합니다. 하나만 다릅니다. 소수형에 대해서 printf 는 %f 를 사용했지만 scanf 는 %lf 를 사용합니다. 씨를 많이 한 사람도 이 부분에 대해서는 잘 모르는 것 같더군요. 잘 알아 두세요.
같은 예제를 조금 변경해 보겠습니다. 이번에는 0xff 라고 입력하면 어떻게 될까요. 한 번 해보세요. 그러면 출력은 0 만 나옵니다. 16진수를 받아들일 것 같지만, 0하나만 받아들이고 문자로 보이는 부분(10진법을 기준으로 ff 는 문자로 보이겠죠)을 무시해, 버립니다.
16진수를 받아들일려면 어떻게 해야 할까요. printf 에서 사용했던 %x 를 사용하면 됩니다.
-----------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main()
{
int value;
printf( "Enter any value \n" );
scanf("%x", &value);
printf("입력했던 값은 : %d\n", value);
system("PAUSE");
return 0;
}
-----------------------------------------------------------------------------
ff 라고 입력해보세요(앞에 0x 는 빼고). 그러면 255라는 10진수 값이 나옵니다. 그렇게 어렵지 않습니다. 문자도 받아 들일 수 있습니다.
----------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main()
{
char value;
printf( "Enter any value \n" );
scanf("%c", &value);
printf("입력했던 값은 : %c\n", value);
system("PAUSE");
return 0;
}
----------------------------------------------------------------------------
입력을 받을 때 "%c" 를 이용하고 출력을 할 때도 "%c" 를 사용했습니다.
이번에는 한 번에 두 가지 압력을 받아들이도록 고쳐보겠습니다.
----------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch;
int number;
printf( "Enter any value (ex)a 34 \n" );
scanf("%c %d", &ch , &number );
printf("입력했던 값은 : %c %d \n", ch , number);
system("PAUSE");
return 0;
}
----------------------------------------------------------------------------
값을 입력할 때는 앞에는 문자를 뒤에는 숫자를 입력하돼, 중간에 스패이스를 하나 주어야 합니다.
결과:
Enter any value (ex)a 34
f 255
f 255
계속하려면 아무 키나 누르십시오 . . .
scanf("%c %d", &ch , &number ); 이 부분만 조금 고쳐보면 많은 응용을 할 수 있습니다. scanf("%c,%d", &ch , &number ); 라고 중간에 ,(콤마,쉼표) 를 주게 돠면 두 변수사이에 구분을 쉼표로 하게 됩니다. 그래서 입력할 때 a,34 같이 입력해야 합니다.
scanf 를 사용할 때 주의할점이 하나 있습니다. 앞에서 printf 에서 배운 esacpe 문자를 사용하지 마세요. scanf("%c %d\n" ); 같은 것을 하지 마세요. 절대 하지 마세요. 이유가 궁금한 사람은 한 번 해보세요. (컴퓨터 다운되고 이런 것은 아닙니다.다만 데이터를 제대로 읽지 못해요. 제가 C 언어처음 배울 때 그런거 써 놓고 왜 안되냐고 하면서 C 배우기를 포기한 적이 있어요. 그래서 이렇게 말씀드리는 겁니다.)
요즘 같이 GUI프로그래밍을 많이 하는 시대에 예전 콘솔에서 출력했던 printf와 scanf같은 함수를 사용할 필요가 없다고 생각하는 사람들 있을 것 같습니다. 그러나 출력용이라는 것이 단지 콘솔에만 있는 것이 아니고 파일에 저장하는 방법도 유사한 인수를 사용하는 fprintf 함수나 fscanf 함수를 사용하고 더 나가 버퍼를 사용하는 ssprintf 함수나 sscanf 함수에서도 유용히 사용하고 있으니 이 부분을 잘 알아두세요.
덧 글(덧붙이는 글)
이 글에서 모르는게 너무 많이 나오지는 않습니까? 많이 나올 거라고 생각합니다. 저의 글은 이 글을 처음 읽을 때도 생각하고 있지만, 한 번 쭉 읽고 다시 한 번 읽을 때 어느정도 전체를 알고 있는 사람도 고려해서 글을 쓰고 있습니다. 그래서 처음부터 이 글을 잘 이해 하지 못했다고 해서 너무 걱정하지 마세요. 다시 말하지만 나도 초보인 상태에서 이 글을 쓰고 있으므로 잘 설명하지 못하는 것은 당연합니다. 여러분의 이해력이 나쁜게 아니라, 내 글실력이 없는 것 입니다. 다, 제 탓 입니다.
작성자 : 한밀(승룡)
버전 : 0.1.5
이 글은 계속 고쳐지고 있습니다.
2004년 3월 말, 봄이 찾아온 어느 날.
최종 수정일 : 2008년 2월 말, 2월인데 아직 눈이 내리다니..
