C Homework,打印出整数的二进制值

时间:2010-09-21 05:44:35

标签: c binary

 #include <stdio.h> 
#include <stdlib.h>

// Print out the binary value of an integer

void binval (int num);
int get_number();

main () {
  int num;

  num = get_number();
  printf("Num = %d\n",num);
  binval(num);

}

void binval (int num) {
  int val = 0;
  int test;

  if (!num) {
    printf("\n");
    return;
  }


  test = num & 0x0001;
  if (test == 1) {
    val = 1;
 }

  num = num / 2;
  printf("%d",val);
  binval(num);
  return;
}

int get_number() { 
  int value = 0;
  char c;
  printf("Please input number : ");
  while ((c = getchar()) != '\n') { 
    if ( (c>'9') || (c<'0') ) { 
      printf("Incorrect character entered as a number - %c\n",c);
      exit(-1);
    }
    else {
      value = 10*value + c - '0';
    }
  }
  return(value);
}

现在它为每个答案编译只获得01。

6 个答案:

答案 0 :(得分:3)

我相信您需要声明您的binval函数,否则编译器会假定它返回int。然后,当您定义它时,它与该假设不匹配。

此外,这一行可能会给您带来麻烦:

if (test = 1) {

这会将test分配给值1,但我认为您的意思是比较它:

if (test == 1) {

答案 1 :(得分:2)

你应该在主要的上面声明binval的原型 void binval(int);

或 将整个binval函数复制到main上面。

Raghu

答案 2 :(得分:2)

我可以看到一些问题:

  • 之前声明函数binval main为void binval (int num);

  • 函数get_number()返回 数字读,但你不是 收集它在num。所以 get_number();应该是 num = get_number();

  • if (test = 1)应为if (test == 1)

  • 您当前的逻辑打印二进制文件 反向中的数字值。 你需要解决这个问题。

答案 3 :(得分:1)

您需要在main()之前声明该功能,就像您int get_number();一样  或者您可以在main()之前定义所有功能。

这称为forward declaration

答案 4 :(得分:1)

binval中对main的来电隐含声明为int binval(int)

为了解决此问题,您需要为binval添加转发声明,或者将main移至binval之后。

在那之后,在修复了其他答案中提到的其他内容之后,我们仍然有一个小问题:这些位将向后打印,因为您首先打印最低位。最简单的解决方法是在binval函数本身内切换printfbinval,但当然您可能不希望基本情况(num == 0)到打印换行符。从main调用该函数后,只需打印换行符。

答案 5 :(得分:1)

你有

void binval (int num) {
  /* ... */
  printf("%d",val);
  binval(num);
  return;
}

,对于16,打印“00001”。尝试递归第一次并在之后打印。

void binval (int num) {
  /* ... */
  binval(num);
  printf("%d",val);
  return;
}