一个有关turbo C的结构问题
本人在学习结构的过程中,做了一个测试程序,但发现运行时出现错误,调试了很长时间也没有解决,请各位大侠给予帮助,具体程序如下:
#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 2.0,使用F9编译没有出现任何错误,但使用ctrl+f9运行时,出现错误:“scanf: floating point formats not linked Abnormal program termination ". 而如果在visual c++6.0中编译运行,一切正常。问题肯定是结构中的float数据类型的问题,因为改成int或其它类型就没有问题,或者将程序中注释部分添加到程序中,就能正常运行。不知有没有人碰到这种问题,是不是tc中需要进行什么设置或需要添加什么头文件?请大家不吝赐教!谢谢!
[解决办法]
Turbo C(TC)系统的浮点连接错误
用TC-2.0系统编写小的C程序,如果程序里用到浮点输入,有时运行中会出现下面错误信息:
scanf : floating point formats not linked
Abnormal program termination
这个错误信息的意思是:scanf的浮点格式转换程序没有连接。
TC开发时(80年代)DOS下的存储资源紧缺,因此TC在编译时尽量不加入无关部分。在没发现需要做浮点转换时,就不将这个部分安装到可执行程序里。但有时TC不能正确识别实际确实需要浮点转换,因此就会出现上面错误。
解决方法:设法告诉TC需要做浮点数输入转换。下面例子里增加了一个double变量并用它输入。
大程序里由于变量很多,只要有了线索,TC就会把浮点转换连上,因此反而不常遇到这个问题。
--------------------------------------------
/* 能导致出现运行错误的程序例子。
在这里用的一个结构数组,结构里面有double类型的成分,TC不能正确识别和处理,因此会导致上述问题。*/
#include <stdio.h>
#define NUM 4
struct entry {
int inum; /* 商品编号 */
int pc; /* 件数 */
double price;/* 价钱 */
} st[NUM]; /* st是个商品表 */
int main () {
int i;
for (i = 0; i < NUM; i++)
scanf( "%d %d %lf ", &st[i].inum, &st[i].pc, &st[i].price);
for (i = 0; i < NUM; i++)
printf( "total price of item %d: %f\n ",
st[i].inum, st[i].pc * st[i].price);
return 0;
}
/* 这个程序编译正常,运行中会出现上面错误信息 */
--------------------------------------------
/* 修改的程序,其中增加了一个double变量x。问题就解决了 */
#include <stdio.h>
#define NUM 4
struct entry {
int inum;
int pc;
double price;
} st[NUM];
int main () {
int i;
double x;
for (i = 0; i < NUM; i++) {
scanf( "%d %d %lf ", &st[i].inum, &st[i].pc, &x);
st[i].price = x;
}
for (i = 0; i < NUM; i++)
printf( "total price of item %d: %f\n ",
st[i].inum, st[i].pc * st[i].price);
return 0;
}