十进制到二进制程序

时间:2015-10-13 01:17:22

标签: c

我正在编写C编程课程的作业,关于使用一个函数将小数转换为二进制,该函数将unsigned char作为其输入并具有void输出。该函数将打印unsigned char的二进制代码。赋值的一个提示是创建一个以128开头并且下降到1的指数数组。

我开始处理任务并运行调试器,但是我的程序无法工作,我收到运行时错误消息:运行时检查失败#2 - 变量userInput周围的堆栈已损坏。

我很感激有关如何修复代码的一些建议,以及是否有一种简单的方法来编写代码以使代码更易于理解。

#include <stdio.h>
#include <stdlib.h>

unsigned char DecimalToBinary(unsigned char decimalInput);

void main() {

    unsigned char userInput = ' ';
    unsigned char resultOfUserInput = DecimalToBinary(userInput);

    printf("Enter a number less than 256: ");
    scanf_s("%u", &userInput);


    printf("%u in binary: %u", userInput, resultOfUserInput);


    system("pause");
}

unsigned char DecimalToBinary(unsigned char decimalNumber) {

    int arrayOfExponents[128] = {}, i = 1, j;

    while (decimalNumber > 0) {

        arrayOfExponents[i] = decimalNumber % 2;
        i++;
        decimalNumber = decimalNumber / 2;
    }

    for (j = i - 1; j > 0; j--) {
        printf("%i", arrayOfExponents[j]);
    }
    return 0;
}

4 个答案:

答案 0 :(得分:1)

%u读取unsigned int(比如说4个字节),你试图将它读入变量userInput(1个字节)

答案 1 :(得分:0)

很少有事情
1)scanf_s("%u", &userInput);请将其更改为scanf_s("%c", &userInput);
2)您在阅读用户输入之前正在呼叫DecimalToBinary

答案 2 :(得分:0)

x = y * z
y2 = x / z
if y != y2: precision was lost

答案 3 :(得分:0)

这是使用递归将数字从基数10转换为任何其他基数的简单方法。我和你分享了一个例子。您可以使用任何其他号码作为基础。

#include <stdio.h>

void baseconvert(int number,int base) 
{
    if(number > 0) 
    {
        int digit = (number % base);
        baseconvert(number / base, base);
        printf("%d",digit);
    }
    else
    {
        printf("\n");
    }
}

int main() 
{
    baseconvert(1023,2);
    return 0;
}