我必须编写一个C程序,使用0到255之间的数字将十进制转换为二进制。使用3个函数而不是全局变量。当我让它运行它只是出于某种原因打印全零。这就是我到目前为止所做的:
#include <stdio.h>
int getNumber();
int dectoBin(int, int binarray[], int);
void printBin(int binary[], int dec);
int main(){
int M = 7;
int binarray[M];
int dec = getNumber();
printf("The decimal number you entered was: %d", dec);
*binarray = 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 0;
}
int decToBin(int dec, int binarray[], int M){
int i, j;
if(dec>255)
printf("Please enter a number between 0 and 255");
else
for(i=7; i>=0;i--){
j = dec >>i;
if(j & 1){
binarray[i] = 1;
}
else {
binarray[i] = 0;
}
}
return *binarray;
}
void printBin(int binary[], int dec){
int i;
if(dec > 255){
printf("PLese use another number");
main();
}
else
{
for(i =7; i > 0;i--){
printf("%d", binary[i]);
printf("\n");
}
}
}
答案 0 :(得分:2)
在你的功能中:
int getNumber(){
int dec;
printf("Enter any a number between 0 and 255: ");
scanf("%d",&dec);
return 0;
}
你返回0,你应该返回dec:
int getNumber(){
int dec;
printf("Enter any a number between 0 and 255: ");
scanf("%d",&dec);
return dec;
}
答案 1 :(得分:0)
在printBin
中,您只打印7位而不是8位。
将for(i =7; i > 0;i--){
更改为for(i = 7; i >= 0; i--){
在main
更改:int M = 7;
到int M = 8;
。您需要8位,范围为0..255。
*binarray = decToBin(dec, binarray, M);
是完全错误的,没有必要,写decToBin(dec, binarray, M) ;
。 decToBin
函数已经完成填充binarray
数组。
否则您的程序架构很差:
输入介于0和255之间的测试应该在getNumber
或。{
在main
中,但不在printBin
。
main()
函数内对printBin
的调用完全正确
错误,即使程序正常运行。
我把这作为练习留给读者找出原因。