【发布时间】:2014-02-22 06:19:30
【问题描述】:
我的二进制转换在第二次重复后不起作用,它似乎只在第一次通过时起作用。的目的是让用户输入一个数字以从整数转换为十六进制、八进制和二进制,并不断询问和转换,直到用户输入 0。请帮助!
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
long toBinary(int);
int main(void) {
int number = 0;
long bnum;
int zero = 0;
while(number != zero) {
puts("\nPlease enter a number you would like to convert to");
puts("\nHexadecimal, octal, and binary: ");
scanf("%d", &number);
if(number != zero) {
printf("\nThe Hexadecimal format is: %x", number);
printf("\nThe Octal format is: %o", number);
bnum = toBinary(number);
printf("\nThe binary format is: %ld\n", bnum);
}
else {
puts("\nI'm sorry you have to enter a number greater than 0.\n");
puts("\nOr have enter an invalid entry.");
}
}
return 0;
}
long toBinary(int number) {
static long bnum, remainder, factor = 1;
int long two = 2;
int ten = 10;
if(number != 0) {
remainder = number % two;
bnum = bnum + remainder * factor;
factor = factor * ten;
toBinary(number / 2);
}
return bnum;
}
【问题讨论】:
-
为什么
int zero = 0对我们所有人来说都是一个谜?您确实知道计算机首先是二进制机器。没有转换,只是不同的表现形式 -
很想知道
320's或1's是如何在long中表示的 -
我是 c 编程的新手,我 2 周前才开始使用 c,所以我对此很陌生,所以我不确定。
-
那么您是说应该将 long 更改为其他东西,例如 unsigned int 或只是 int?
-
在二进制的情况下,最好使用字符数组。请参阅下面发布的答案