2012년 10월 3일 수요일

print함수에서의 유용한 정보 모음(이스케이프 시퀀스,Escape Sequence)

첫시작은 프린트함수에서 사용하는 기호부터 알아보겠습니다.

특수문자
의미
\a
경고음
\b
백스페이스(backspace),키보드에서 ()
\f
폼 피드(form feed)
\n
개 행(띄어쓰기)
\r
캐리지 리턴(carriage return)
\t
수평 탭
\v
수직 탭
\'
작은따옴표 출력
\"
큰 따옴표 출력
\?
물음표 출력
\\
역슬래쉬 출력

별로 어렵지 않죠? 쓰는 예로는 밑에처럼.

ex)printf(" \a \b \f \n \r \t \v \' \" \? \\");

이렇게 쓰는건데, 의미는 위에 있는대로 합니다.

실험으로 자세히 알아보겠습니다.


1.\a
실행하면 본체에서 삐 소리가 난다.

2.\b
\b앞에 aa를 붙여놨다.

결과는 a하나만 출력
3.\f

처음엔 폼피드가 뭔가해서 사진처럼 저랬는데, 알고보니 프린트할 때, 저 기호부터 한 장을 뛰어넘은다음 프린트재개를하는 기호더라구요 ㅋㅋㅋ.

"이게뭐짘ㅋㅋㅋ"까지 프린트하고 여자성별표시부터 한 장 뛰어넘은 후, 인쇄 재개라고 합니다.

4.\r (\n은 모두 아실거라생각해서 패스)

이것은 캐리지리턴이라고 하는 명령을 하는 함수인데요.

사진을 보면서 설명하겠습니다.

보시면 출력엔 잉이 없어졌죠? 어떻게 된거냐면요.
\r뒤에있는것(띄어쓰기 한 칸)을 맨 앞에 덮어씌운겁니다.

다른 예를 보겠습니다.


\r뒤에 아무것도없어서 그대로 출력이 됩니다.

다른 예제를 보겠습니다.
잉잉과 \r뒤에 아 별~ㅠㅠ까지는 잉잉보다 훨씬 내용이 많습니다.

출력은 덮어씌우는거니까 \r앞에 있는 내용은 \r뒤에 있는 내용이 덮어 씌웁니다.

5.\t

보시는바와 같이 Tab키라보시면 되겠습니다.

6.\v

수직 탭이라는 것은 C언어에서는 저 이상한 기호하나만 출력하지만, 다른 컴파일에서는 LF(LineFeed) 역할을 한다고 한다.(라인피드는 알아서 검색하시길)

나머지는 다 무슨 뜻인지 알 것이라 생각한다.

두 번째, 서식문자의 종류와 그 의미.


서식문자
출력 대상 함수
출력 형태
%d
char, short, int
10진 정수
%ld
long
10진 정수
%lld
long long
10진 정수
%u
unsigned int
부호없는 10진 정수
%o
unsigned int
부호없는 8진 정수
%x,%X
unsigned int
부호없는 16진 정수
%f
float, double
10진수 방식의 부동소수점 실수
%Lf
long, double
10진수 방식의 부동소수점 실수
%e,%E
float, double
e 또는 E 방식의 부동소수점 실수
%g,%G
float, double
값에 따라 %f %e 사이에서 선택
%c
char, short, int
값에 대응하는 문자
%s
char
문자열
%p
void
포인터의 주소 값

이것들을 어떻게 쓰는지는 여태까지 해온 결과로 다 아실 수 있을거라 믿습니다.

그런데 여기서 참고로 알아야 할 것들만 골라서 하겠습니다.

1.정수를 출력할 때,%o와 %x의 부가설명

%o와 %x는 각각 8진수 16진수 서식문자이다.

그런데, 이는숫자만을 출력한다. 그래서 %#o, %#x로 써준다.

그러면 확실히 "아! 이건 8진수구나, 아 이건 16진수구나."라고 알 수 있다.




2.실수를 출력할 때, %e, %g의 부가설명

%f는 0.000001을 그대로 출력하지만, %e는 0.000001을 1.0e-6으로 표현합니다.

눈치채신분도 있겠지만, 이는 1.0x10^-20(일점영곱하기십에마이너스이십제곱)이다.



그리고 %g는 소수점 4자리까지는  %f 처럼 출력하다가 5자리부터는 %e처럼 출력합니다.

실험으로 알아보겠습니다.


변수 초기화를 %f형식으로 입력해서 소수점 5째 자리부터 %e형식으로 출력합니다.

그리고, 변수를 %e형식으로 초기화해도 결과는 같습니다.



셋 째, 위에 표에는 없지만 필드 폭을 지정해서 출력하는 방법.

%10d: 필드 폭을 10칸 확보하고 오른쪽 정렬
%-10d: 필드 폭을 10칸 확보하고 왼쪽 정렬

※위에 d는 숫자냐 문자냐에 따라서 각각 다르다.(문자면s 정수면d 실수면f 등..)

마지막으로 실험을 통해서 알아본 뒤, 포스트를 마치는걸로 하겠습니다.


아시죠 변수로 저장 및 초기화 안하면 수라도 프린트함수에서 큰따옴표로 가둬야 한다는것!

근데 솔직히 저도 이거 정신없이해서 왜 결과가 이렇게 나왔는지 정확히 판단을 못하겠네요. 대충 이렇게 나온답니다. ㅋㅋㅋㅋㅋㅋ 아 무책임한것 봐.

아무튼 자야할시간이라 이번주 포스트는 여기서 마치겠습니다.

댓글 없음:

댓글 쓰기