簡體   English   中英

C作業,打印出整數的二進制值

[英]C Homework, Print out the binary value of an integer

 #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。

我相信您需要聲明您的binval函數,否則編譯器會假定它返回int 然后,當您定義它時,它與該假設不符。

另外,此行可能會給您帶來麻煩:

if (test = 1) {

這會將test分配給值1,但我想您打算將其進行比較:

if (test == 1) {

您應該在main上方聲明binval的原型,例如void binval(int);。

或將整個binval函數復制到main之上。

拉古

我可以看到一些問題:

  • binval之前的功能binval聲明為void binval (int num);

  • 函數get_number()返回讀取的數字,但您未將其收集為num。 所以get_number(); 應該是num = get_number();

  • if (test = 1)應該是if (test == 1)

  • 您當前的邏輯會反向打印數字的二進制值。 您需要解決此問題。

您需要像main() int get_number();一樣在main()之前聲明函數int get_number(); 或者,您可以在main()之前定義所有函數。

這稱為前向聲明

要將呼叫binvalmain隱式聲明它喜歡int binval(int)

為了解決這個問題,您需要為binval添加前向聲明,或將main移至binval之后。

之后,在解決了其他答案中提到的其他問題之后,我們仍然有一個小問題:這些位將向后打印,因為您首先要打印最低有效位。 最簡單的解決方法是在binval函數本身內切換binvalprintf ,但是您當然不希望基本情況(num == 0)打印換行符。 main調用函數后,只需打印換行符即可。

你有

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

對於16,將打印“ 00001”。 嘗試遞歸,然后再打印。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM