十进制到二进制C.

时间:2014-03-13 15:34:38

标签: c unix

我必须编写一个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");
        }
    }

}

2 个答案:

答案 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数组。

否则您的程序架构很差:

  1. 输入介于0和255之间的测试应该在getNumber或。{ 在main中,但不在printBin

  2. main()函数内对printBin的调用完全正确 错误,即使程序正常运行。

  3. 我把这作为练习留给读者找出原因。