我正在编写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;
}
答案 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;
}