scanf:未链接的浮点格式

时间:2012-09-11 09:22:43

标签: c scanf

我收到错误scanf:浮点格式未链接  同时阅读以下结构的“信息”值。

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

在main()

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

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

如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

解决方案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;
}

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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

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

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

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

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

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

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