2014-03-13 95 views
-2

我必须编写一个C程序,它使用0到255之间的数字将十进制转换为二进制。使用3个函数并且不使用全局变量。当我运行它时,出于某种原因打印全部为零。这是我到目前为止有:十进制到二进制C

#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

打算你的代码。 –

+0

你知道,在声明之外,'* binarray'就等于'binarray [0]',对吧? – Medinoc

+0

在'printBin'内调用'main'是很有效的! –

回答

2

在你的函数:

int getNumber(){ 
int dec; 
printf("Enter any a number between 0 and 255: "); 
scanf("%d",&dec); 
return 0; 
} 

你返回0,你应该回到12月:

int getNumber(){ 
int dec; 
printf("Enter any a number between 0 and 255: "); 
scanf("%d",&dec); 
return dec; 
} 
+0

+1:该函数还应该验证'scanf()的返回值' – pmg

+0

噢好吧你是对的谢谢你我真的很感激它。我不得不返回十二月 – user3335209

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功能完全是 错误,即使程序工作正常。

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