#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。
答案 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()
之前定义所有功能。
答案 4 :(得分:1)
binval
中对main
的来电隐含声明为int binval(int)
。
为了解决此问题,您需要为binval
添加转发声明,或者将main
移至binval
之后。
在那之后,在修复了其他答案中提到的其他内容之后,我们仍然有一个小问题:这些位将向后打印,因为您首先打印最低位。最简单的解决方法是在binval
函数本身内切换printf
和binval
,但当然您可能不希望基本情况(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;
}