출력 2

자, 변수를 선언하고 값을 담는 법을 알았으니, 이제 그 수를 출력하는 법에 대해 알아봅시다.

#include <stdio.h>
int main() {
      int a = 5, b = 3;
      printf("a는 %d, b는 %d, a + b는 %d\n", a, b, a + b);
      return 0;
}

a는 5, b는 3, a + b는 8


여기서 %d'4바이트 부호 있는 정수'가 %d의 자리에 옴을 의미합니다. 보면 문자열 뒤로 a, b, a + bprintf에 넘겨주는 모습을 볼 수 있는데, 각각 첫 번째 %d, 두 번째 %d, 세 번째 %d로 출력됩니다. 여기서의 %d형식 문자라고 합니다.

다음은 자주 사용되는 형식 문자입니다.

%d 부호 있는 10진수 정수
%u 부호 없는 10진수 정수
%o 부호 없는 8진수 정수
%c 값에 해당하는 아스키 문자
%x 부호 없는 16진수 정수, 소문자 사용
%X 부호 없는 16진수 정수, 대문자 사용
%f 실수 자료형 소수점 아래 6자리 출력, 다른 자릿수는 %.자릿수f
%s 문자열 출력, \0이 나올 때까지 1바이트씩 출력하며 주소값 받음

%s에 대해서는 당장 이해하지 못해도 좋습니다.

여기에 다음의 접두사를 사용해 확장합니다.

l long int, unsigned long int
ll long long
h short int, unsigned short int
l long double

접두사는 '%llu가 부호 없는 8자리 정수', '%.8lf가 long double 소수점 아래 8자리'와 같이 사용합니다. 물론 가장 많이 사용하게 될 것은 %d입니다.

#include <stdio.h>
int main() {
      int a = 5;
      unsigned short int b = 0xFFFF;//0x으로 시작하면 16진수
      char c = 'S';           //S의 아스키 코드값은 83, 사실 'S'는 1바이트 정수 83이다
      printf("a는 %d\n", a);
      printf("b는 %hu...16진수 %hX\n", b, b);
      printf("c는 %c...아스키 코드값 %d", c, c);
      return 0;
}

a는 5
b는 65535...16진수 FFFF
c는 S...아스키 코드값 83

printf 이외에도 여러 출력 수단이 있습니다. putsputchar이 그것입니다.

#include <stdio.h>
int main() {
      puts("그아아앗");
      puts("퉤에에엣");
      putchar(66);      //B의 아스키 코드값은 66
      putchar('O');
      putchar('Y');
      return 0;
}

그아아앗
퉤에에엣
BOY

puts문자열을 출력하고, 한 줄 띕니다. 즉, 위의 puts("퉤에에엣")printf("퉤에에엣\n")과 같은 것을 출력합니다. putchar는 말 그대로 문자 한 개를 출력합니다. 따옴표로 둘러싸인 'B'를 보내던, B의 아스키 코드값인 66을 보내던 똑같이 동작합니다. 다만 저 66은 4바이트지만 'B'는 1바이트라는 것을 알아두세요.