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);
}
이렇게 하면 한 문자씩 출력을 할 수가 있어요. 뿌잉 뿌잉.
'C_C++' 카테고리의 다른 글
포인터 문법으로 스왑 swap 함수 작성해보자 (0) | 2020.07.06 |
---|---|
write() 함수로 0~9 숫자 출력 (0) | 2020.07.06 |
putchar() 함수로 알파벳 순서대로 출력하기 (0) | 2020.07.06 |
write()함수로 겹치지 않는 숫자 출력해보기 (1) | 2020.07.06 |
write() 함수와 scanf() If제어문으로 음수 양수 확인 (0) | 2020.07.06 |