我最近刚开始学习C语言。我写了一个很短的程序,可以将十进制数和二进制数进行转换。我想尝试编写一个可以将十进制数转换为任何进制(最高支持36进制)的代码。然而,我的代码只会输出垃圾信息。
#include <stdio.h>
#include <string.h>
void printBase(int n, int k, int i, char a[])
{
int placeholder;
if (n != 0)
{
//return n % 2 + 10 * printBinary(n / 2);
placeholder=(char)(n%k);
if(placeholder>=10)
{
a[i] = (char)(placeholder - 10) + 'A';
} else {
a[i] = (char)placeholder;
}
i++;
printBase(n/2, k, i, a);
}
for (i=0; a[i]!='\0'; i++)
{
printf("%c", a[i]);
}
return;
}
void reverse(char fromStr[], char toStr[])
{
int i, j=0;
i=getchar();
for (i=0; fromStr[i]!='\0'; i++)
{
j++;
}
i=0;
while (j>=0)
{
toStr[i]=fromStr[j];
i++;
j--;
}
printf("%s", toStr);
}
int main()
{
int n, k;
char a[81], b[81];
setvbuf(stdout, NULL, _IONBF, 0);
printf("Enter a deicmal number you want to convert to binary: ");
scanf("%i", &n);
fflush(stdout);
printf("Enter a base: ");
scanf("%i", &k);
printBase(n, k, 0, a);
//printf("%s", a);
//reverse(a, b);
return 0;
}
我以为问题是出在我的反转函数上,但它在这段代码之外运行得很好。即使我在printBase函数内打印字符串a,它也会打印出垃圾。这里的问题是什么?
printBase(n/2, k, i, a);
应该改为printBase(n/k, k, i, a);
. - 500 - Internal Server Errorelse
中使用a[i] = (char)placeholder + '0';
,但这并不能解决你的问题。 - Fiddling Bitsreverse
函数也是错误的。空终止字符最终出现在toStr[0]
而不是末尾。尝试将while
循环更改为i = 0;while(j > 0){ toStr[i] = fromStr[j - 1]; i ++; j--; } toStr [i] = '\ 0';
。 - Ian Abbott