1.当我尝试显示 conv 时它没有显示任何内容,但是当我使用下标打印一个元素时我能够看到内容。
2.十进制转二进制、八进制、十六进制的程序
#include<stdio.h>
int main()
{
convbase(23,2);
return 0;
}
int convbase(int num, int base)
{
char conv[33] = {' '};
char *ptr = &conv[32];
conv[32] = '\0';
do
{
*--ptr = "0123456789ABCDEF"[num % base];
num = num/base;
}while(num);
if(base == 16)
{
*--ptr = 'x';
*--ptr = '0';
}
if(base == 8)
{
*--ptr = '0';
}
printf("Decimal to base %d is :\t%s\n",base,conv);
return 0;
}
最佳答案
改变
printf("以 %d 为基数的十进制为:\t%s\n",base,conv);
到
printf("以 %d 为基数的十进制为:\t%s\n",base,ptr);
或
将内容(ptr - 到字符串末尾)移动到转换数组的开头
另一种替代方法是从 conv
的末尾开始写入,而不是从头开始写入,然后在完成后调用 strrev()
来反转它。
printf("以 %d 为基数的十进制为:\t%s\n",base,strrev(conv));
关于字符数组未使用 %s 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14721504/