我创建了一个结构:
typedef struct {
float real, img;
} cmplx;
并创建了一个函数:
void input(cmplx *a){
scanf("%f + %f i", &a->real, &a->img); }
从main调用函数:
cmplx a;
input(&a);
达到scanf
时执行停止。如果浮点数被整数替换,问题就解决了。这是什么行为?有没有办法可以使用float来解决我的问题?
该程序是在Turbo C上编译的,在MS-WINDOWS XP中
答案 0 :(得分:2)
如果不知道程序执行停止的错误消息就很难回答,但是从你的评论“是否有任何我可以编写的代码告诉编译器链接浮点库”, 我怀疑它可能是this issue:
“未链接的浮点格式”是Borland运行时错误(Borland C或C ++,Turbo C或C ++)。 Borland的编译器试图变得聪明而不是 除非您需要,否则链接在浮点(f-p)库中。唉,他们 所有人都认为错误。一个常见的情况是你不打电话给任何人 f-p函数,但你在scanf()或中有%f或其他f-p格式 printf()调用。治愈的方法是调用f-p函数,或者至少用力 一个出现在链接中。
为此,请在源文件中的某处定义此函数,但不要 叫它:
static void forcefloat(float *p) { float f = *p; forcefloat(&f); }
只要具有主程序,它就不必在模块中 它位于一个将包含在链接中的模块中。
如果你有Borland C ++ 3.0,那么自述文件文件会略少一些 丑陋的解决方法。在程序中插入这些语句:
extern unsigned _floatconvert; #pragma extref _floatconvert
使用此变通方法或更现代的编译器可能会解决您的问题。
答案 1 :(得分:1)
问题是使用像TurboC这样的多年的C编译器,因为它对我来说很好(我正在使用DevC ++) 检查this discussion是否存在类似问题