본문 바로가기
C언어

C언어 // 알아두면 쓸모 있는 지식 3. 같은 숫자인데 거짓을 반환하는 이유

by algosketch 2019. 8. 15.

 모종의 이유로 숫자를 int형이 아닌 char형으로 받아서 switch문을 다음과 같이 멋지게 완성했다. 혹은 int로 하더라도 결과는 같을 것이다.

/*
#include <conio.h>
*/

char choice;
choice = getch();
switch(choice) {
case 1: ...
case 2: ...
case 3: ...
default: ...
}

 그리고 키보드로 1~3 사이의 값을 입력했다. 그러나 어떤 값을 입력하든 default로 넘어가는 것이다. 우리의 기대를 만족시켜줄 코드는 다음과 같이 짜야한다.

/*
#include <conio.h>
*/

char choice;
choice = getch() - '0';
switch(choice) {
case 1: ...
case 2: ...
case 3: ...
default: ...
}

 차이를 알겠는가? getch()와 같은 함수는 결국 문자를 처리하는 함수이다. 숫자를 입력하면 그 숫자도 문자로 받아들인다. 먼저 작성했던 코드에서 1을 입력했다면 1과 '1'을 비교해놓고 참이 되기를 바랐던 것이다. 즉 '1'은 아스키코드로 실제 값은 49이다. 그래서 48을 빼 원래 숫자와 같게 만들어 줬다. 48은 코드의 의도를 읽기 편하도록 '0'로 작성하였다.