4

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

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 的任何值并退出程序。

如何解决这个问题?

4

3 回答 3

3

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

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

void dummy(float *a) {
    float b=*a; //perform some floating access
    dummy (&b); //calling a floating point function
}
于 2013-09-30T04:49:06.523 回答
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;
}
于 2014-03-25T09:32:23.680 回答
1

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

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

原因:浮点设置为无。当浮点选项应该设置为 Fast 或 Normal 时,您将其设置为 None。

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 */
}
于 2014-01-29T05:26:45.640 回答