我收到错误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的任何值并退出程序。
如何解决这个问题?
答案 0 :(得分:2)
您可以将以下代码添加到一个源模块(它对我有用):
extern _floatconvert;
#pragma extref _floatconvert
示例:
#include<....>
.............
extern _floatconvert;
#pragma extref _floatconvert
int main(){......}
..........
..........
在源代码中添加以下虚拟函数:
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 */
}