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

时间:2017-08-21 13:15:45

标签: c

我正在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;

}

我没有收到任何错误消息,我被提示输入一个十进制数字,但之后它没有响应。

2 个答案:

答案 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;
}