[英]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()
之前定義所有函數。
這稱為前向聲明 。
要將呼叫binval
在main
隱式聲明它喜歡int binval(int)
為了解決這個問題,您需要為binval
添加前向聲明,或將main
移至binval
之后。
之后,在解決了其他答案中提到的其他問題之后,我們仍然有一個小問題:這些位將向后打印,因為您首先要打印最低有效位。 最簡單的解決方法是在binval
函數本身內切換binval
和printf
,但是您當然不希望基本情況(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.