【问题标题】:scanf: floating point format not linked [duplicate]scanf:浮点格式未链接[重复]
【发布时间】:2012-09-11 09:22:43
【问题描述】:

我收到错误 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 的任何值并退出程序。

如何解决这个问题?

【问题讨论】:

标签: c scanf


【解决方案1】:

在使用 Turbo C/Borland C 编译器时最有可能出现此问题。除非我们需要,否则这些编译器不会链接到浮点 (f-p) 库中。因此,当我们在scanf()printf() 调用中有"%f" 或其他浮点(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】:

    解决方案一:

    根据以下链接: 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;
    }
    

    【讨论】:

      【解决方案3】:

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

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

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-02
        • 2021-12-30
        相关资源
        最近更新 更多