9.1 문자 변수 선언하기
이제 문자 변수에 문자를 저장하고 출력해보겠습니다. 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.
char.c
#include <stdio.h> int main() { char c1 = 'a'; // 문자 변수를 선언하고 문자 a를 저장 char c2 = 'b'; // 문자 변수를 선언하고 문자 b를 저장 // char를 %c로 출력하면 문자가 출력되고, %d로 출력하면 정숫값이 출력됨 printf("%c, %d\n", c1, c1); // a, 97: a의 ASCII 코드값은 97 printf("%c, %d\n", c2, c2); // b, 98: b의 ASCII 코드값은 98 return 0; }
실행 결과
a, 97 b, 98
char 변수에 'a', 'b'와 같이 작은따옴표로 문자를 묶어서 저장했습니다. printf 함수로 char 변수나 문자를 출력할 때는 서식 지정자로 %c를 사용합니다. 만약 서식 지정자로 %d를 사용하여 출력하면 char 변수에 저장된 정숫값(ASCII 코드값)이 그대로 출력됩니다.
여기서 'a'와 'b'를 출력했으므로 a와 b 문자가 그대로 출력되고, 표 8‑2의 내용대로 a의 정숫값인 10진수 97, b의 정숫값인 10진수 98이 출력됩니다. 다른 알파벳 문자들도 넣어서 출력해보세요.
- %c: 문자(character)의 약어로 c를 사용합니다.
문자 여러 개로 이루어진 문자열은 다소 어려운 주제이므로 'Unit 39 문자열 사용하기'에서 자세히 설명하겠습니다.
작은따옴표로 문자를 넣지 않고 정수만으로 문자 자료형을 사용할 수도 있습니다.
char_ascii.c
#include <stdio.h> int main() { char c1 = 97; // a의 ASCII 코드값 97 저장 char c2 = 98; // b의 ASCII 코드값 98 저장 // char를 %c로 출력하면 문자가 출력되고, %d로 출력하면 정숫값이 출력됨 printf("%c, %d\n", c1, c1); // a, 97 printf("%c, %d\n", c2, c2); // b, 98 return 0; }
실행 결과
a, 97 b, 98
변수 c1, c2에 정수 그대로 ASCII 코드값 97, 98을 넣었는데 printf 함수에서 %c로 출력해보면 알파벳 소문자 a, b가 나옵니다. 즉, 표 8‑2의 내용대로 정수 97과 문자 'a'는 같으며 어떤 서식 지정자를 사용해서 출력하느냐에 따라 다르게 보입니다.
여기서 ASCII 코드값 97, 98은 10진수입니다. 이번에는 ASCII 코드값 16진수를 넣어서 문자 자료형을 사용해보겠습니다.
char_ascii_hex.c
#include <stdio.h> int main() { char c1 = 0x61; // a의 ASCII 코드값 0x61 할당 char c2 = 0x62; // b의 ASCII 코드값 0x62 할당 // char를 %c로 출력하면 문자가 출력되고, %d로 출력하면 정수 값이 출력됨 // %x로 출력하면 16진수로 출력됨 printf("%c, %d, 0x%x\n", c1, c1, c1); // a, 97, 0x61 printf("%c, %d, 0x%x\n", c2, c2, c2); // b, 98, 0x62 return 0; }
실행 결과
a, 97, 0x61 b, 98, 0x62
마찬가지로 printf 함수에서 %c로 출력해보면 알파벳 소문자 a, b가 출력됩니다. 그리고 ASCII 코드대로 10진수 97, 98 그리고 16진수 0x61, 0x62가 나옵니다.
printf 함수에서 16진수를 출력하려면 서식 지정자로 %x를 사용합니다(
- %x, %X: 16진수(hexadecimal)에서 hex의 x를 사용합니다.
문자 자료형에 같은 숫자를 저장한다 하더라도 문자 '0'과 숫자 0은 전혀 다르므로 주의합니다.
char_zero.c
#include <stdio.h> int main() { char c1 = '0'; // 문자 0을 저장 char c2 = 0; // 숫자 0을 저장 printf("%c %d\n", c1, c1); // 0 48: 문자 상태로 0이 출력됨 // 문자 0의 ASCII 코드 48이 출력됨 printf("%c %d\n", c2, c2); // 0: ASCII 코드 0은 널문자이므로 아무것도 출력되지 않음 // 정수 0이 출력됨 return 0; }
실행 결과
0 48 0
char 변수에 작은따옴표로 감싼 숫자 '0'을 저장하면 숫자라 하더라도 문자 상태로 출력됩니다. 따라서 printf에서 %c로 출력하면 0이 출력됩니다. 그리고 %d로 출력해보면 문자 '0'의 ASCII 코드값인 48이 나옵니다.
여기서 char 변수에 숫자 0을 그대로 넣었을 때는 %c로 출력해도 아무것도 출력되지 않습니다. 왜냐하면 ASCII 코드 0은 널 문자(NULL)를 뜻하며 아무 것도 들어있지 않은 상태이기 때문입니다.
즉, printf에서 %d로 출력했을 때 '0'은 48, 0은 0으로 출력되므로 전혀 다른 값이라는 것을 알 수 있습니다.