【发布时间】:2018-07-16 17:36:37
【问题描述】:
我正在尝试编写一个程序,该程序将采用以 10 为底的浮点数并将其以 2 为底的小数部分转换。在以下代码中,我打算将我的转换函数调用为 printf,并格式化输出;我遇到的问题在于我的 fra_binary() ,我无法找出分别返回由每轮转换结果组成的整数的最佳方法(连接)。这是我现在所做的(代码没有优化,因为我还在处理它):
#include <stdio.h>
#include <math.h>
int fra_binary(double fract) ;
int main()
{
long double n ;
double fract, deci ;
printf("base 10 :\n") ;
scanf("%Lf", &n) ;
fract = modf(n, &deci) ;
int d = deci ;
printf("base 2: %d.%d\n", d, fra_binary(fract)) ;
return(0) ;
}
int fra_binary(double F)
{
double fl ;
double decimal ;
int array[30] ;
for (int i = 0 ; i < 30 ; i++) {
fl = F * 2 ;
F = modf(fl, &decimal) ;
array[i] = decimal ;
if (F == 0) break ;
}
return array[0] ;
}
显然这会部分返回所需的输出,因为我需要将整个数组连接为一个 int 或 char 来显示我需要的一系列 1 和 0。所以在每一轮,我想使用我处理的数字的小数部分作为二进制数来连接(1 + 0 = 10 而不是 1)。我该怎么做? 希望这是有道理的!
【问题讨论】:
-
通过返回该数组(或者更确切地说是指向其第一个元素的指针),您有一个非常清楚的 undefined behavior 案例。是时候找一本好书或教程,了解变量的范围和生命周期了。
-
哦,如果您声明一个函数返回一种类型,然后将其定义为返回另一种类型,那将不会很好地工作,并且是编译器警告或错误的一个来源。
-
谢谢@Someprogrammerdude,但正如我在原帖中所说,我留下“返回数组”表示我打算使用 for 循环的串联结果。在我的代码中,您会看到我已将循环的每个重复都存储在数组中,但我真正想做的是将每个重复连接到一个 int 或一个我可以在 main() 中使用的 char。希望它更清楚一点。
-
所以如果我理解正确的话,你想打印一个
double的二进制表示,上面是C/伪代码的混合显示你想要实现什么? -
好的,如果我将它编辑到我之前的输出中可能最好,这样就不会再造成混乱了。要点保持不变:在我尝试转换数字的小数部分时,我无法获得可以在我的 main 函数中使用的输出。