简体   繁体   English

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

[英]Decimal to Binary converter, console unresponsive

I'm trying a simple decimal to binary converter on C but the console isn't responding after entering the decimal number. 我正在尝试在C上使用简单的十进制到二进制转换器,但是输入十进制数字后控制台没有响应。 Here's my code. 这是我的代码。

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;

}

I'm not getting any error messages and I'm being prompted to enter a decimal number but after that it's unresponsive. 我没有收到任何错误消息,并被提示输入一个十进制数字,但是此后它没有响应。

You have a typo which is causing an infinite while loop. 您有一个错字导致一个无限的while循环。 The semicolon at the end of while creates a while loop without a body. while末尾的分号会创建一个while循环而没有主体。

while (n!=0);
    {

should be 应该

while (n!=0)
    {

your program converts the number into something which is a very strange format. 您的程序将数字转换为非常奇怪的格式。

7 will be 111 in decimal 60 will be 111100 in decimal. 7将为十进制的111,十进制将为111100。 But you will overflow very soon as signed integer max value in this strange "binary in decimal" format is 1111111111 which id 1024 in the normal number 但是您很快就会溢出,因为这种奇怪的“十进制二进制”格式的有符号整数最大值是1111111111,其正常编号为1024

If you want to keep your strange format you must change to unsigned long long and you will be able to keep 11111111111111111111 or 1048575 in the "normal" decimal or convert the number to the string 如果要保留奇怪的格式,则必须将其更改为unsigned long long并且可以将11111111111111111111111或1048575保留为“普通”十进制,或者将数字转换为字符串

any long long number to any base (almost - you need more characters for the digits) or simpler second function. 任何长整数到任何基数(几乎-您需要更多的数字字符)或更简单的第二个功能。 It does not work with the minimum negative number 最小负数不起作用

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