C语言 输入一个十进制数,要求分别定义不同的函数将十进制转换成八进制和十六进制,并输出?

输入一个十进制数,转换成对应的八进制和十六进制,并输出。要求分别定义不同的函数将十进制转换成八进制和十六进制。想问一下我这个哪里错了 函数和数组的组合学得不好

你的问题还真不好说,大方向没问题,细节上得加强。为了尽可能简单,我用了全局变量,除非必要,滥用它是一个非常不好的习惯。
自己要学会不使用全局变量,怎么实现相同的功能。另外了解一下使用%o,%x,%a这几种格式时printf的输出结果
int a[100] = { 0 }; // 转换后的值
int flag = 0; // 符号

// 把x转换为base进制数
int convert(int x, int base)
{
int i = 0;
flag = 0;

if (x < 0)
{
flag = 1;
x = -x; // 确保是非负整数
}

if (base <= 0)
{
printf("进制输入错误\n");
return 0;
}

while (x)
{
a[i++] = x % base;
x /= base;
}
i--;

return i; // 返回位数
}

int eight(int x)
{
return convert(x, 8);
}

int sixteen(int x)
{
return convert(x, 16);
}

/* 非常简陋,只处理16进制以下的情形 */
void printf_num(int i)
{
printf("\n");

if (flag)
printf("-"); // 负号
while (i >= 0)
{
if (a[i] > 9 && a[i] < 16)
printf("%c", a[i] + 55); // 输出A-F
else
printf("%d", a[i]); // 输出0-9
i--;
}
}

int main() {

int x, i;

printf("请输入一个十进制整数:");
scanf("%d", &x);

i = eight(x);
printf_num(i);

i = sixteen(x);
printf_num(i);

return 0;
}
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答