putchar() 함수로 Int 정수 출력해보기
putchar() 함수는 문자 하나를 출력하는 함수입니다. 따라서 정수값을 출력하려면 고민을 좀 해야 합니다.
#include <stdio.h>
int main(void) {
int num;
scanf("%d", &num);
putchar(num);
return 0;
}
위의 코드를 한 번 보세요. 간단한 코드입니다. num 변수에 숫자를 입력 받은 다음에 putchar() 함수로 출력합니다. 여기에 숫자를 넣으면 어떤 값을 출력할까요? ASCII 값에 대응한 문자가 출력하는 것을 볼 수 있습니다.
만약 1을 입력하면 어떤 값이 나올까요? 10진수 1에 해당하는 ASCII CODE 가 나옵니다. 65를 입력하면 대문자 'A'가 나옵니다.
숫자를 넣어 보겠습니다. 10 미만 숫자를 입력합니다. 입력한 숫자 값을 출력하고 싶다면 48을 더해야 원하는 숫자가 나옵니다. ASCII 값 48이 문자 '0' 시작하는 위치이기 때문입니다.
입력한 값 + 48,
'0' ==48 ~ '9' ==57
#include <stdio.h>
int main(void) {
int num;
int nAsciiZero = 48;
scanf("%d", &num);
if( num>=0 && num <10)
putchar(num+nAsciiZero);
return 0;
}
위와 같이 작성하여, 숫자 0에서 9까지 입력하면 입력한 값을 그대로 출력할 수 있습니다. nAsciiZero에 48을 할당하였습니다. 변수명만 봐도 무엇을 의미하는지 알 수 있어서 정말 마음에 들엉.
하지만 10 이상 숫자는 출력할 수가 없어요. ASCII 값은 9까지만 표시할 수 있거든요. 10이상 문자는 조합해서 만들어야 해요.예를들어 숫자 11를 출력하려면 어떻게 하면 될까요. 문자 '1' 을 두개 연속해서 표시하면 11 처럼 보이는 것처럼 두 개의 문자를 붙여야 해요. 숫자가 아니고 문자이기 때문에 조합해서 만들어야 합니다.
#include <stdio.h>
int main(){
int num,nb,temp=1;
int nAsciiZero=48 ;
scanf("%d",&num);
if(num >=0 && num<=9){
putchar(num+nAsciiZero);
return 0;
}
else if(num<0 && num>-10){
putchar('-');
num *=-1;
putchar(num+nAsciiZero);
return 0;
}
nb = num;
while( nb/=10){
temp*=10;
}
if(num<0) {
putchar('-');
num =num*-1;
}
nb=num;
while( temp>1 ){
nb/=temp;
putchar(nb+nAsciiZero);
nb = num%temp;
temp/=10;
}
putchar(nb+nAsciiZero);
}
이렇게 하면 한 문자씩 출력을 할 수가 있어요. 뿌잉 뿌잉.