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;
}