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 */ }