我正在尝试用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
型
1条答案
按热度按时间lf5gs5x21#
结果我忘了写else语句...
函数应该看起来像这样insetad:
字符串