我正在C上尝试一个简单的十进制到二进制转换器,但输入十进制数后控制台没有响应。这是我的代码。
int convertDecimalToBinary(int n);
int main()
{
int n;
printf("Enter a decimal number: ");
scanf("%d", &n);
convertDecimalToBinary(n);
printf("%d in decimal = %d in binary", n, convertDecimalToBinary(n));
return 0;
}
int convertDecimalToBinary(int n)
{
int binaryNumber = 0;
int remainder, i = 1;
while (n!=0);
{
remainder = n%2;
n /= 2;
binaryNumber += remainder*i;
i *= 10;
}
printf("%d\n",binaryNumber);
return binaryNumber;
}
我没有收到任何错误消息,我被提示输入一个十进制数字,但之后它没有响应。
答案 0 :(得分:6)
你有一个错字导致无限循环。 while结尾处的分号创建了一个没有正文的while循环。
while (n!=0);
{
应该是
while (n!=0)
{
答案 1 :(得分:0)
您的程序会将数字转换为非常奇怪的格式。
7将是十进制的111将是十进制的111100。但是你会很快溢出这个奇怪的"二进制中的有符号整数最大值"格式为1111111111,其标识为正常数字中的1024
如果您想保留您的奇怪格式,您必须更改为unsigned long long
,并且您将能够在"正常"中保留11111111111111111111或1048575。十进制或将数字转换为字符串
任何基数的长数(几乎 - 你需要更多的数字字符)或更简单的第二功能。它不适用于最小负数
char *reverse(char *str);
const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *convert(long long number, char *buff, int base)
{
char *result = (buff == NULL || base > strlen(digits) || base < 2) ? NULL : buff;
char sign = 0;
if (number < 0)
{
sign = '-';
number = -number;
}
if (result != NULL)
{
*result = 0;
do
{
*buff++ = digits[number % (base )];
number /= base;
} while (number);
if(sign) *buff++ = sign;
if (!*result) *buff++ = '0';
*buff = 0;
reverse(result);
}
return result;
}
char *convertToBIN(long long number, char *buff)
{
char *result = buff;
char sign = 0;
if (number < 0)
{
sign = '-';
number = -number;
}
if (result != NULL)
{
*result = 0;
do
{
*buff++ = digits[number & 1];
number >>= 1;
} while (number);
if (sign) *buff++ = sign;
if (!*result) *buff++ = '0';
*buff = 0;
reverse(result);
}
return result;
}
char *reverse(char *str)
{
char tmp;
int len;
if (str != NULL)
{
len = strlen(str);
for (int i = 0; i < len / 2; i++)
{
tmp = *(str + i);
*(str + i) = *(str + len - i - 1);
*(str + len - i - 1) = tmp;
}
}
return str;
}