2

我创建了一个结构:

typedef struct {
  float real, img;
} cmplx;

并创建了一个函数:

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

并将 main 中的函数调用为:

cmplx a;
input(&a);

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

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

4

2 回答 2

2

在不知道程序执行停止的错误消息的情况下很难回答,但是根据您的评论“我可以编写任何代码来告诉编译器链接浮点库”,我怀疑这可能是这个问题

“浮点格式未链接”是 Borland 运行时错误(Borland C 或 C++、Turbo C 或 C++)。Borland 的编译器尽量智能,除非您需要,否则不会在浮点 (fp) 库中链接。唉,他们都把决定弄错了。一种常见的情况是您不调用任何 fp 函数,但在 scanf() 或 printf() 调用中有 %f 或其他 fp 格式。解决方法是调用一个 fp 函数,或者至少强制一个函数出现在链接中。

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

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

它不必与主程序一起位于模块中,只要它位于将包含在链接中的模块中即可。

如果您有 Borland C++ 3.0,则 README 文件记录了一个稍微不那么难看的解决方法。在您的程序中插入这些语句:

extern unsigned _floatconvert;
#pragma extref _floatconvert

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

于 2013-02-04T03:59:22.203 回答
1

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

于 2013-02-04T02:46:57.590 回答