C语言 将负数转换为正数后的尾随数字

ctehm74n  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(93)

我正在尝试用C实现我的printf版本。
一切都在工作,除了当我试图打印一个负数,有些东西不工作,它打印了几个垃圾数字后,我想要的数字。
代码如下:

const char g_chars[] = "0123456789abcdef";

void printf_unsigned(unsigned int num, int base) {
    char string[32];
    int pos = 0;

    do {
        int rem = num % base;
        num /= base;
        string[pos++] = g_chars[rem];
    } while (num > 0);

    while (--pos >= 0) {
        PrintChar(string[pos]);
    }
}

void printf_signed(int num, int base) {
    if (num < 0) {
        PrintChar('-');
        printf_unsigned(num * -1, base);
    }
    printf_unsigned(num, base);
}

字符串
printf_unsigned将二进制数转换为ASCII表示形式,并逐个字符地打印出来,并且它正在工作。
printf_signed函数检查一个数字是否为负数,如果不是,它就调用printf_unsigned,否则它打印一个前导-,然后调用printf_unsigned乘以-1
但是当我尝试用负数调用printf_signed函数时,它会打印出我想要的结果,但随后又添加了一些垃圾。
示例:

printf_signed(-3, 10);
printf_signed(-10, 10);
printf_signed(-15, 10);


产出:

-34294967293
-104294967286
-154294967281

lf5gs5x2

lf5gs5x21#

结果我忘了写else语句...
函数应该看起来像这样insetad:

void printf_signed(int num, int base){
    if (num < 0){
        PrintChar('-');
        printf_unsigned(num*-1, base);
    } else {
        printf_unsigned(num, base);
    }
}

字符串

相关问题