I created a structure as:
typedef struct {
float real, img;
} cmplx;
And I created a function as
void input(cmplx *a) {
scanf("%f + %f i", &a->real, &a->img);
}
and called the function from main as:
cmplx a;
input(&a);
The execution stops when the scanf
is reached. If floats are replaced by ints, the problem is solved. What is this behaviour? Is there a way I can use floats for my problem?
The program was compiled in Turbo C, in Windows XP.
It is hard to answer without knowing the error message that your program's execution stops with, but from your comment "is there any code i can write to tell compiler to link floating point library", I suspect it may be 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
Using this workaround, or a more modern compiler, will probably fix your issue.