scanf:未链接的浮点格式

我得到错误scanf:浮点格式没有链接,同时读取以下结构的’info’的值。

struct node { float info; struct node *next; }*start; 

在主()

 void main() { struct node *temp; temp = (struct node*)malloc(sizeof(struct node)); printf("enter data = "); scanf("%f",&temp->info); } 

它没有读取该scanf的任何值并从程序中退出。

怎么解决这个问题?

解决方案1:

根据以下链接: http : //docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devwin32/rte_printf_scanf_float_not_linked_xml.html

您可以将以下代码添加到一个源模块(它对我有用):

 extern _floatconvert; #pragma extref _floatconvert 

例:

 #include<....> ............. extern _floatconvert; #pragma extref _floatconvert int main(){......} .......... .......... 

解决方案2:

在源代码中添加以下虚拟函数:

 void dummy() { float f,*fp; fp=&f; } 

使用Turbo C / Borland C编译器时很可能会出现此问题。 除非我们需要,否则这些编译器不会链接到浮点(fp)库中。 因此,当我们在scanf()printf()调用中使用"%f"或其他浮点(fp)格式时,我们需要通过强制添加任何浮点(fp)函数。

要修复此错误,请调用浮点(fp)函数或仅添加包含至少一个浮点(fp)函数的文件的链接。 例如。

 void dummy(float *a) { float b=*a; //perform some floating access dummy (&b); //calling a floating point function } 

浮点格式包含格式化信息,用于处理某些运行时库函数中的浮点数,例如scanf()和atof()。 通常,您应该避免链接浮点格式(占用大约1K),除非您的应用程序需要它们。 但是,必须显式链接以有限且特定的方式操作字段的程序的浮点格式。

请参阅以下可能原因列表(从最常见到最不常见的列表)以确定如何解决此错误:

原因:浮点设置为无。 当应将浮点选项设置为“快速”或“正常”时,将浮点选项设置为“无”。

FIX:将浮点设置为快速或正常。

原因:编译器过度优化或浮点格式确实需要链接。 如果程序以有限且特定的方式操作浮点数,则需要浮点格式。 在某些情况下,编译器将忽略scanf()中的浮点使用。 例如,当尝试将数据读入浮点变量时,可能会发生这种情况,该浮点变量是结构中包含的数组的一部分。

FIX:将以下代码添加到一个源模块:

解决方案:只需在程序中添加以下function即可。 它将强制编译器包含处理浮点链接所需的库。

 static void force_fpf() /* A dummy function */ { float x, *y; /* Just declares two variables */ y = &x; /* Forces linkage of FP formats */ x = *y; /* Suppress warning message about x */ }