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;
  // temp를 활용하여 자릿수를 구한다. 
  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);

}

이렇게 하면 한 문자씩 출력을 할 수가 있어요. 뿌잉 뿌잉.

Posted by 뭔가느낌이
,