Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C언어에서 putchar() 함수만으로 long int 값 출력하는 방법

C언어에서는 printf()를 사용하면 변수의 값을 손쉽게 출력할 수 있습니다. 하지만 이번 글에서는 putchar() 함수 하나만을 사용하여 long int 타입의 값을 출력하는 방법을 알아보겠습니다.

putchar()는 이름 그대로 단일 문자(character)만 출력할 수 있는 함수입니다. 따라서 숫자를 출력하려면 숫자를 한 자리씩 분리한 뒤, 각 자릿수를 문자로 변환하여 출력해야 합니다.

숫자를 문자로 변환하는 원리

핵심은 아스키(ASCII) 코드에 있습니다. 문자 '0'의 아스키 코드 값은 48이며, 숫자 0~9는 이 값으로부터 연속적으로 배치되어 있습니다. 그래서 숫자 값에 문자 '0'을 더해주면 해당 숫자의 아스키 문자 형태를 얻을 수 있습니다. 예를 들어 숫자 5에 '0'을 더하면 문자 '5'가 되는 것입니다.

각 자릿수를 추출하기 위해서는 나눗셈과 나머지 연산을 활용합니다. 10으로 나눈 몫을 재귀적으로 처리하면 가장 앞자리부터 출력할 수 있고, 10으로 나눈 나머지가 바로 현재 자릿수입니다.

예제 코드

#include <stdio.h>

void print_long(long value) {
    if(value != 0) {
        print_long(value / 10);  // 더 높은 자릿수부터 먼저 처리
        putchar((value % 10) + '0');  // 현재 자릿수를 문자로 변환해 출력
    }
}

main(void) {
    long a = 84571;
    print_long(a);
}

실행 결과

84571

코드 동작 방식 설명

위 코드의 print_long() 함수는 재귀 호출 방식으로 동작합니다.

1. 먼저 값이 0이 아닌지 확인합니다.
2. 값을 10으로 나눈 몫을 인자로 하여 자기 자신을 다시 호출합니다. 이 과정이 반복되면 가장 높은 자릿수부터 차례대로 스택에 쌓입니다.
3. 재귀 호출이 끝나고 돌아오면서 각 단계에서 value % 10, 즉 마지막 자릿수에 '0'을 더해 문자로 만든 후 putchar()로 출력합니다.

예를 들어 84571이 입력되면, 재귀 호출이 8457 → 845 → 84 → 8 → 0 순으로 진행된 뒤, 돌아오는 과정에서 '8', '4', '5', '7', '1'이 순서대로 출력됩니다.

참고: 음수와 0 처리하기

위 기본 코드는 양수만 정상적으로 출력합니다. 실무 수준의 완성도를 높이려면 음수와 0도 고려해야 합니다.

#include <stdio.h>

void print_long(long value) {
    if(value < 0) {
        putchar('-');  // 음수 부호 출력
        if(value == LONG_MIN) {  // 최솟값 특수 처리
            print_long(-(value / 10));
            putchar('8');
            return;
        }
        value = -value;
    }
    if(value != 0) {
        print_long(value / 10);
        putchar((value % 10) + '0');
    }
}

main(void) {
    long a = 84571;
    print_long(a);
    putchar('\n');
    print_long(-123456789L);
    putchar('\n');
    if(a == 0) putchar('0');  // 0 처리
}

이처럼 putchar() 하나만으로도 재귀 호출과 아스키 코드 변환을 조합하면 long int 값을 충분히 출력할 수 있습니다. 임베디드 환경처럼 표준 라이브러리 사용이 제한적인 상황에서 유용하게 활용할 수 있는 기법입니다.