C домашнее задание, распечатать двоичное значение целого числа - PullRequest
1 голос
/ 21 сентября 2010
 #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 ]

3 голосов
/ 21 сентября 2010

Я полагаю, вам нужно объявить вашу binval функцию, или компилятор предполагает, что она возвращает int.Затем, когда вы определяете его, оно не соответствует этому предположению.

Кроме того, эта строка, скорее всего, доставит вам неприятности:

if (test = 1) {

Это присвоит test значению 1,но я думаю, что вы хотели сравнить это:

if (test == 1) {
2 голосов
/ 21 сентября 2010

Я вижу несколько проблем:

  • Объявите функцию binval перед основной как void binval (int num);

  • Функция get_number() возвращает прочитанное число, но вы не собираете его в num.Таким образом, get_number(); должно быть num = get_number();

  • if (test = 1) должно быть if (test == 1)

  • Ваша текущая логика выводит двоичное значениеномер в обратный .Вам нужно это исправить.

2 голосов
/ 21 сентября 2010

Вы должны объявить прототип binval выше main как void binval (int);

или скопировать всю функцию binval выше main.

Raghu

1 голос
/ 21 сентября 2010

У вас есть

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

, который в течение 16 печатает «00001».Попробуйте повторить сначала и печатать после.

void binval (int num) {
  /* ... */
  binval(num);
  printf("%d",val);
  return;
}
1 голос
/ 21 сентября 2010

Вызов binval в main неявно объявляет его как int binval(int).

Чтобы это исправить, вам нужно либо добавить предварительное объявление для binval, либо переместитьmain до после binval.

После этого и после исправления других вещей, упомянутых в других ответах, у нас все еще остается одна маленькая проблема: биты будут распечатаны в обратном направлении, потому что вы печатаетенаименее значимый бит первым.Самый простой способ исправить это - переключить binval и printf внутри самой функции binval, но, конечно, вы, вероятно, не захотите, чтобы базовый случай (num == 0) печатал новую строку.Просто напечатайте новую строку после вызова функции из main.

1 голос
/ 21 сентября 2010

Вам нужно объявить функцию до main(), как вы это сделали int get_number(); или вы можете определить все свои функции до main().

Это называется предварительное объявление .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...