[英]Decimal to Binary converter, console unresponsive
我正在尝试在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;
}
我没有收到任何错误消息,并被提示输入一个十进制数字,但是此后它没有响应。
您有一个错字导致一个无限的while循环。 while末尾的分号会创建一个while循环而没有主体。
while (n!=0);
{
应该
while (n!=0)
{
您的程序将数字转换为非常奇怪的格式。
7将为十进制的111,十进制将为111100。 但是您很快就会溢出,因为这种奇怪的“十进制二进制”格式的有符号整数最大值是1111111111,其正常编号为1024
如果要保留奇怪的格式,则必须将其更改为unsigned long long
并且可以将11111111111111111111111或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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.