#include <stdio.h> #include <stdlib.h> int main() { char str[20]; long dec; int base = 10; printf("请输入一个数字:"); scanf("%s", str);// 判断数字的进制 if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) { base = 16; } else if (str[0] == '0') base = 8; else if (str[0] == 'b' || str[0] == 'B') base = 2; else base=10; dec = strtol(str, NULL, base); printf("数字 %s 的十进制值为:%ld\n", str, dec); printf("数字 %s 的二进制值为:%ld\n", str, dec); printf("数字 %s 的十六进制值为:%ld\n", str, dec); printf("数字 %s 的八进制值为:%ld\n", str, dec); return 0; }这个程序有什么问题
时间: 2024-01-10 08:03:34 浏览: 61
这个程序的问题在于计算输出二进制、十六进制和八进制值的方式不正确。下面是修改后的程序:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[20];
long dec;
int base = 10;
printf("请输入一个数字:");
scanf("%s", str);
// 判断数字的进制
if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
{
base = 16;
}
else if (str[0] == '0')
{
base = 8;
}
else if (str[0] == 'b' || str[0] == 'B')
{
base = 2;
}
else
{
base=10;
}
dec = strtol(str, NULL, base);
printf("数字 %s 的十进制值为:%ld\n", str, dec);
printf("数字 %s 的二进制值为:%ld\n", str, dec2bin(dec));
printf("数字 %s 的十六进制值为:%lX\n", str, dec);
printf("数字 %s 的八进制值为:%lo\n", str, dec);
return 0;
}
long dec2bin(long dec)
{
long bin = 0, rem, i = 1;
while (dec != 0)
{
rem = dec % 2;
dec /= 2;
bin += rem * i;
i *= 10;
}
return bin;
}
```
修改后的程序通过调用 `dec2bin` 函数来将十进制数转换为二进制数,并且输出十六进制和八进制数时使用 `%lX` 和 `%lo` 格式化符号来输出正确的结果。
阅读全文