错误分析:floating point formats not linked

最近在编写结构体-链表程序时,出现floating point formats not linked这样的错误提示,开始以为是自己编程的问题,可仔细检查核对没有什么错误。简写程序如下:

#include < stdio.h >
#include
< stdlib.h >
#include
< conio.h >

struct  student
{
  
int  num;
  
float  score;
  
struct  student  * next;
};
void  main()
{
  
struct  student  * p;
  clrscr();
  p
= ( struct  student  * )malloc( sizeof ( struct  student));
  scanf(
" %d,%f " , & p -> num, & p -> score);
  printf(
" %d,%f " ,p -> num,p -> score);
  free(p);
}
程序没什么问题,可编译运行后当输入101,98时就会出现
scanf:floating point formats not linked
这样的错误,让人很郁闷。

后来上网查了一些资料,才知道这是Borland run-time error ,详细说明如下:
Why did my program bomb at run time with 'floating point formats not linked' or 'floating point not loaded'?

--------------------------------------------------------------------------------

Date: 5 Feb 2002 22:03:03 -0400

These messages look similar but have very different causes.

"Floating point not loaded" is Microsoft C's run-time message when the
code requires a numeric coprocessor but your computer doesn't have one
installed. If the program is yours, relink it using the xLIBCE or xLIBCA
library (where x is the memory model).

"Floating point formats not linked" is a Borland run-time error (Borland
C or C++, Turbo C or C++). Borland's compilers try to be smart and not
link in the floating- point (f-p) library unless you need it. Alas, they
all get the decision wrong. One common case is where you don't call any
f-p functions, but you have %f or other f-p formats in scanf() or
printf() calls. The cure is to call an f-p function, or at least force
one to be present in the link.

To do that, define this function somewhere in a source file but don't
call it:

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


It doesn't have to be in the module with the main program, as long as
it's in a module that will be included in the link.

If you have Borland C++ 3.0, the README file documents a slightly less
ugly work-around. Insert these statements in your program:

extern unsigned _floatconvert;
#pragma extref _floatconvert


解决办法:
只要在程序中加入任意红色部分就可以正常运行了。
但其中的原理还是没搞明白。
WHY?

转载于:https://www.cnblogs.com/qixin622/archive/2007/05/01/734006.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值