이전시간에 변수의 선언과 출력에서 변수를 선언하고 정수 데이터를 대입하여 출력하는 방법을 배웠습니다. 그리고 그 다음시간에는 변수에 데이터를 입력하는 방법까지 배웠었죠. 기억이 잘 안나시거나 처음 방문하시는 분이라면 아래 포스팅을 참조해 주시기 바랍니다.
https://mech19.tistory.com/124
https://mech19.tistory.com/126
이때 우리는 Printf함수와 Scanf_s함수를 배웠고, 변수의 자료형 중에서 int 타입을 배웠었죠. 여기서 int는 integer의 약자로 정수를 의미하는 영어의 약자였는데, 숫자가 아니라 문자를 입력하거나 출력하려면 어떻게 해야하는지를 오늘 함께 알아보겠습니다.
먼저 문자를 저장하는 변수는 char입니다. int가 integer의 약자이듯이 char도 character의 약자입니다. 여기서 잠깐 변수의 종류와 사이즈에 대해서 다시 한번 보고 갈께요.
Name | Size | Range |
char | 1byte | signed : -128 ~ 127 |
unsigned : 0 ~ 255 | ||
short int | 2byte | signed : -32,768 ~ 32,767 |
unsigned : 0 ~ 65,535 | ||
int | 4byte | signed : -2147483648 ~ 2147483647 |
unsigned : 0 ~ 4294967295 | ||
long int | 4byte | signed : -2147483648 ~ 2147483647 |
unsigned : 0 ~ 4294967295 | ||
bool | 1byte | 1 or 0 (true or false) |
float | 4byte | +/- 3.4e +/-38 (~7digits) |
double | 8byte | +/-1.7e +/-308 (~15digits) |
long double | 8byte | +/-1.7e +/-308 (~15digits) |
위에서 보는것과 같이 character는 1byte의 사이즈를 가지고 있습니다. 이를 통해 -128부터 127까지 총 256개의 수를 저장할 수 있는걸 알 수 있습니다. 그런데 여기서 의문이 듭니다. 아니 char은 문자를 저장하는 변수라면서요. 그런데 갑자기 무슨 256개의 수를 저장한다고 하나요? 라는 생각이 들 수 있겠죠? 간단히 얘기하자면 컴퓨터는 저장된 데이터가 문자인지 숫자인지 알 수 있는 방법이 없습니다. 단지 저장된 2진수를 문자형태로 사용하거나 숫자형태로 사용할 뿐이죠. 잘 이해가 안되시더라도 아래의 예제를 읽어보시면 이해가 되실거니 넘어가도 됩니다.
바로 예제를 하나 해보겠습니다.
자. 위와 같은 프로그램을 하나 작성했다고 가정해 보겠습니다. 기본적인 부분은 제외하고 설명을 해보자면
a라는 변수 명을 가진 char변수를 하나 선언하였고,
변수 a에 문자 c를 대입하였습니다. 여기서 중요한 것은 문자 c에 작은 따옴표를 사용하였다는 부분입니다. 만약에 작은 따옴표를 사용하지 않았다면 프로그램에서는 c를 문자로 보지않고 변수로 봅니다. 그러면 에러가 발생하겠죠? 그렇기 때문에 꼭 작은 따옴표를 사용하여야 합니다. 그리고
printf함수를 사용하여 변수에 a에 대입된 값을 출력해 보았습니다. 결과가 어떻게 나왔을까요?
실행의 결과값은 위와 같습니다. printf함수를 사용할 때 문자를 출력하기 위해서는 %c를 사용하였고 c에 해당하는 숫자데이터를 출력하기 위해서는 %d를 사용하였습니다. 그랬더니 "a에 들어있는 문자는 c이고 값은 99이다."라는 문장으로 출력되었네요. 여기서 알 수 있는 것은 c라는 문자의 숫자데이터는 99라는 사실이죠. 그럼 다른 모든 문자도 숫자데이터를 가지는 것인가? 라는 의문이 발생하죠? 일단 가장 기본적으로 우리가 사용하는 문자에 대한 숫자데이터는 아래와 같이 아스키코드(ASCII)라는 코드로 지정되어 있습니다.
위 내용상으로는 0번부터 127번까지 128개 밖에 없는데 이는 위 표준을 정할 당시에 7비트만으로 충분하다고 생각해서 입니다. 그러나 더 많은 종류의 문자가 필요하게 되자 1비트를 추가하여 256개의 Extended ascii code를 만들었습니다. 그러나 이것으로도 부족하자 결국 유니코드라는 새로운 형식의 문자체계를 도입하게 됩니다. 유니코드에 대해서는 다음에 다시 알아보겠습니다. 여튼 위 표에 나와있는것과 같이 문자 c는 10진수 99라는 데이터를 의미하며 영문자는 대문자와 소문자를 구별한다는 것을 알 수 있습니다.
그럼 문자를 변수에 직접입력하고 싶을때는 어떻게 하면 될까요? 예제를 만들어 보자면 아래와 같이 만들면 됩니다.
위 예제에서 중요한 부분은 scanf_s함수를 사용한 부분이겠죠?
scanf_s함수에 대한 사용은 이미 이전시간에 알아보았습니다. 문자를 입력해야 하기 때문에 %c를 사용했다는 부분만 기억하면 됩니다. 참고로 각각의 자료형 변수에 대한 입력 형태는 아래와 같습니다.
오늘은 여기까지 하겠습니다. 감사합니다.
제 블로그를 방문해 주셔서 감사합니다.
도움이 되셨다면 공감(좋아요) 부탁드리고,
댓글은 다른분들께도 좋은 정보일 수 있으니
공개로 부탁드립니다.
여러분의 작은 정성이 좋은 포스팅을 생산하는
힘이 된답니다. :)
감사합니다.
'PROGRAMMING > C' 카테고리의 다른 글
C언어 if - else 문 ( else if 문 ) (1) | 2022.09.19 |
---|---|
C언어 if 문 (0) | 2022.09.15 |
연산의 우선순위 (0) | 2022.09.07 |
비트연산자 (0) | 2022.09.05 |
대입연산자, 산술연산자 (0) | 2022.02.23 |
댓글