我必须编写2个将dec转换为bin的程序。我已经完成了第一个,但是当我尝试运行这个时,它打印出一个随机数的数组,不知道为什么,这就是我所拥有的:
#include <stdio.h>
int getNumber();
int dectoBin(int, int binarray[], int);
void printBin(int binary[], int dec);
int main()
{
int M = 8;
int binarray[M];
int dec = getNumber();
printf("The decimal number you entered was: %d", dec);
decToBin(dec, binarray, M);
printBin(binarray, dec);
return 0;
}
int getNumber()
{
int dec;
printf("Enter any a number between 0 and 255: ");
scanf("%d",&dec);
return dec;
}
int decToBin(int dec, int binarray[], int M)
{
int i, j;
for(i=8; i>=0;i--)
{
while(dec != 0)
{
binarray[i]= dec % 2;
dec = dec / 2; binarray[i] = dec;
}
}
return *binarray;
}
void printBin(int binary[], int dec)
{
int i;
if(dec > 255)
{
printf("please use another number");
main();
}
else
{
for(i =8; i >= 0;i--)
{
printf("%d", binary[i]);
printf("\n");
}
}
}
答案 0 :(得分:1)
您正在设置binarray[i]
两次 - 一次正确(在模数声明之后)和一次错误(在除以dec之后)。因此,如果您的十进制数为65
,则倒数第二个数字为32
。
您还可以使binarray
成为位数而不是数字。这会给你一个编译错误,并且可能会让你陷入逻辑错误。
编辑:此计划存在很多控制流问题。您应该在调用dec > 255
之前检查是否decToBin
,否则程序将无法正常运行。 decToBinary
不应该返回int
- 它应该返回int
s(或我建议的位)的数组,这就是您应该发送给printBin
的内容。现在你正在返回指向binArray
的指针(你知道指针是什么吗?)decToBin
也应该返回void
,因为它不执行任何计算。
编辑2:正如其他人指出你的数组索引不正确,我不知道你是怎么没有得到一个数组越界错误。此外,在打印时你的方法是错误的:你需要使用for
循环,该循环从0
开始,到7
结束。
答案 1 :(得分:1)
以下是一些建议。
dectoBin
但在函数调用和函数定义中有decToBin
。确保它们都是dectoBin
或全部是decToBin
。M
未在decToBin
中使用。随意将其删除。
getNumber()
,以便检查范围,并确保从返回语句中获得0到255之间的数字。这样就无需在printBin
进行检查。 decToBin
的实施比你想的要简单得多。 for循环可以简化为:
for(i=7; i>=0;i--, dec /= 2)
{
binarray[i]= dec % 2;
}
最后,printBin
的实现可能会略微不同,以使输出更具可读性。它们不是一次打印一个数字,而是可以一行打印。
这是我想出的:
#include <stdio.h>
int getNumber();
int decToBin(int, int binarray[]);
void printBin(int binary[], int dec);
int main()
{
int M = 8;
int binarray[M];
int dec = getNumber();
printf("The decimal number you entered was: %d\n", dec);
decToBin(dec, binarray);
printBin(binarray, dec);
return 0;
}
int getNumber()
{
int dec;
printf("Enter a number between 0 and 255: ");
scanf("%d",&dec);
if( dec < 0 || dec > 255)
{
printf("Please use another number\n");
return getNumber();
}
return dec;
}
int decToBin(int dec, int binarray[])
{
int i;
for(i=7; i>=0;i--, dec /= 2)
{
binarray[i]= dec % 2;
}
return *binarray;
}
void printBin(int binary[], int dec)
{
int i;
printf("The decimal number in binary: ");
for(i=0; i!=8; ++i)
{
printf("%d", binary[i]);
}
printf("\n");
}
示例执行和输出:
~>>./test-07
Enter a number between 0 and 255: 149
The decimal number you entered was: 149
The decimal number in binary: 10010101