Turbo C中的scanf()和浮点数

时间:2013-02-04 02:28:30

标签: c floating-point floating-point-conversion

我创建了一个结构:

typedef struct {
  float real, img;
} cmplx;

并创建了一个函数:

void input(cmplx *a){
  scanf("%f + %f i", &a->real, &a->img); }

从main调用函数:

cmplx a;
input(&a);

达到scanf时执行停止。如果浮点数被整数替换,问题就解决了。这是什么行为?有没有办法可以使用float来解决我的问题?

该程序是在Turbo C上编译的,在MS-WINDOWS XP中

2 个答案:

答案 0 :(得分:2)

如果不知道程序执行停止的错误消息就很难回答,但是从你的评论“是否有任何我可以编写的代码告诉编译器链接浮点库”,   我怀疑它可能是this issue

  

“未链接的浮点格式”是Borland运行时错误(Borland    C或C ++,Turbo C或C ++)。 Borland的编译器试图变得聪明而不是    除非您需要,否则链接在浮点(f-p)库中。唉,他们    所有人都认为错误。一个常见的情况是你不打电话给任何人    f-p函数,但你在scanf()或中有%f或其他f-p格式    printf()调用。治愈的方法是调用f-p函数,或者至少用力    一个出现在链接中。

     

为此,请在源文件中的某处定义此函数,但不要    叫它:

static void forcefloat(float *p)
{ 
    float f = *p;
    forcefloat(&f);
}
     

只要具有主程序,它就不必在模块中    它位于一个将包含在链接中的模块中。

     

如果你有Borland C ++ 3.0,那么自述文件文件会略少一些    丑陋的解决方法。在程序中插入这些语句:

extern unsigned _floatconvert;
#pragma extref _floatconvert

使用此变通方法或更现代的编译器可能会解决您的问题。

答案 1 :(得分:1)

问题是使用像TurboC这样的多年的C编译器,因为它对我来说很好(我正在使用DevC ++) 检查this discussion是否存在类似问题