#include<stdio.h> main() { static float f[3][4]; int i,j; for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%f",&f[i][j]); for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%f ",f[i][j]); printf("\n"); } } scanf:floating point formats not linked Abnormal program termination 如果你用的编译器是TC的活,我们经常会碰到上面的问题!! 实则是: Turbo-C的问题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; }

评论