我有一个包含float var的结构。我试图使用指向结构的指针读取值。这是代码:
struct mas {
float m;
};
int main(void)
{
struct mas *ms;
ms=(struct mas*)malloc(sizeof(struct mas));
scanf("%f",&(ms->m));
printf("%f",ms->m);
return 0;
}
但是运行该程序会产生以下错误:
scanf floating point formats not linked
在Windows PC上使用的编译器是Borland Turbo C ++(3.0)。为什么会这样?
答案 0 :(得分:5)
这可能会有所帮助:http://www.faqs.org/faqs/msdos-programmer-faq/part2/section-5.html
来自文章:
Borland的编译器试图变得聪明而不是 除非您需要,否则链接在浮点(f-p)库中。唉,他们 所有人都认为错误。 ...(强制它们链接它)在源文件中的某处定义此函数但不这样做 叫它:
static void forcefloat(float *p)
{
float f = *p;
forcefloat(&f);
}
此外:
如果你有Borland C ++ 3.0,那么自述文件文件会略少一些 丑陋的解决方法。在程序中插入这些语句:
extern unsigned _floatconvert;
#pragma extref _floatconvert
答案 1 :(得分:3)
为什么会这样......
因为你古老无用的编译器中有a bug。升级到能够正确处理浮点运算的新版本。
最新版本的GCC是一个不错的选择,或者您可以免费下载Microsoft的Visual C++ Express软件包,它将其编译器与世界级的IDE捆绑在一起。
答案 2 :(得分:1)
我能够在GCC 4.2.1下编译和运行此代码:
#include <stdlib.h>
#include <stdio.h>
struct mas{
float m;
};
int main()
{
struct mas *ms;
ms=malloc(sizeof(struct mas));
scanf("%f",&(ms->m));
printf("%f\n",ms->m);
return 0;
}
您是否遗漏了任何#include
声明?我认为您不需要从malloc()
投射结果。