gpt4 book ai didi

c - Turbo C 中的 scanf() 和 float

转载 作者:行者123 更新时间:2023-12-04 05:12:49 26 4
gpt4 key购买 nike

我创建了一个结构:

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 中

最佳答案

在不知道程序执行停止的错误消息的情况下很难回答,但是从您的评论中可以看出“我可以编写任何代码来告诉编译器链接浮点库”,
我怀疑它可能是 this issue :

"Floating point formats not linked" is a Borland run-time error (Borland C or C++, Turbo C or C++). Borland's compilers try to be smart and not link in the floating- point (f-p) library unless you need it. Alas, they all get the decision wrong. One common case is where you don't call any f-p functions, but you have %f or other f-p formats in scanf() or printf() calls. The cure is to call an f-p function, or at least force one to be present in the link.

To do that, define this function somewhere in a source file but don't call it:

static void forcefloat(float *p)
{
float f = *p;
forcefloat(&f);
}

It doesn't have to be in the module with the main program, as long as it's in a module that will be included in the link.

If you have Borland C++ 3.0, the README file documents a slightly less ugly work-around. Insert these statements in your program:

extern unsigned _floatconvert;
#pragma extref _floatconvert


使用此解决方法或更现代的编译器可能会解决您的问题。

关于c - Turbo C 中的 scanf() 和 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14679642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com