前几天在Turbo C2.0环境中调试程序时,发现在运行中对结构中的浮点数变量进行数据输入时总出现错误:“scanf: floating point formats not linked Abnormal program termination",调试了很长时间也没有解决。程序如下:
#define N 2
#include <stdio.h>struct ss
{
float tt;
} a[N];main()
{
int i;clrscr();
printf("/nFloat numbers in a structure:/n");for(i=0;i<N;i++)
scanf("%f", &a[i].tt);printf("/n");
for(i=0;i<N;i++)
printf("a[%d].tt=%.2f ",i,a[i].tt);getch();
}
后来,在main主函数中尝试添加一个浮点数变量,在先输入该浮点数变量值,然后接着输入结构中的浮点数变量值就不会再出现该问题。不断反复尝试了多次,都是如此。修改后的程序如下:
#define N 2
#include <stdio.h>struct ss
{
float tt;
} a[N];main()
{
int i;
float tt;clrscr();
printf("Normal float numbers:/n");
scanf("%f", &tt);printf("/nFloat numbers in a structure:/n");
for(i=0;i<N;i++)
scanf("%f", &a[i].tt);printf("/n");
for(i=0;i<N;i++)
printf("a[%d].tt=%.2f ",i,a[i].tt);getch();
}
思考了很久也没有想清楚是什么原因造成的。最后求助于网友才解开这个疑惑,原来这是Turbo C系统的浮点连接错误,TC开发时(80年代)DOS下的存储资源紧缺,因此TC在编译时尽量不加入无关部分。在没发现需要做浮点转换时,就不将这个部分安装到可执行程序里。但有时TC不能正确识别实际确实需要浮点转换,因此就会出现“scanf的浮点格式转换程序没有连接”的错误。这里特别感谢网友freshui的帮助。根据这个原因,程序可以修改为:
#define N 2
#include <stdio.h>struct ss
{
float tt;
} a[N];main()
{
int i;
float tt;clrscr();
/*printf("Normal float numbers:/n");
scanf("%f", &tt);*/printf("/nFloat numbers in a structure:/n");
for(i=0;i<N;i++)
{
scanf("%f", &tt);
a[i].tt=tt;
}printf("/n");
for(i=0;i<N;i++)
printf("a[%d].tt=%.2f ",i,a[i].tt);getch();
}