我正在尝试编写一个c程序,将用户输入的十进制转换为二进制和八进制。
给定用户输入24,我的输出应该是这样的:
n24在十进制中是11000在二进制中。
n24在十进制中是30在八进制中。
但是终端只执行十进制到二进制的转换。因此,我当前的输出是这样的:n24在十进制中是11000在二进制中。
n在十进制中是0,在八进制中是0。
这是有问题的代码。对于上下文,这两个转换是由两个不同的人编写的:
#include <stdlib.h>
int main()
{
int a[10], input, i; //variables for binary and the user input
int oct = 0, rem = 0, place = 1; //variables for octal
printf("Enter a number in decimal: ");
scanf("%d", &input);
//decimal to binary conversion
printf("n%d in Decimal is ", input);
for(i=0; input>0;i++)
{
a[i]=input%2;
input=input/2;
}
for(i=i-1;i>=0;i--)
{printf("%d",a[i]);}
//decimal to octal conversion
printf("n%d in Decimal is ", input);
while (input)
{rem = input % 8;
oct = oct + rem * place;
input = input / 8;
place = place * 10;}
printf("%d in Octal.", oct);
}
只有当我将十进制部分移到二进制部分时才执行八进制转换。但是我希望它们同时执行。
第一个for循环操作输入变量,因此其值在二进制转换后始终为0。将代码修改如下,使用一个额外的变量对
进行计算:printf("n%d in Decimal is ", input);
int temp = input;
for(i=0; temp>0;i++)
{
a[i]=temp%2;
temp=temp/2;
}
for(i=i-1;i>=0;i--)
{
printf("%d",a[i]);
}
//decimal to octal conversion
printf("n%d in Decimal is ", input);
temp = input;
while (temp)
{
rem = temp% 8;
oct = oct + rem * place;
temp = temp / 8;
place = place * 10;
}
printf("%d in Octal.", oct);