繁体   English   中英

十进制到二进制转换器,控制台无响应

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM