• C

# Unknow logical error

Can somebody help me, I don't know how come I will got 0 for the output, but I am ok if I use "int" for the struct. All I have to use is "double" in this program. Please help. Thanks !!

#include <stdio.h>

typedef struct{
double n;
double d;
}fract;

fract subtract_fract(fract f1, fract f2);
fract multiply_fract(fract f1, fract f2);
fract divide_fract(fract f1, fract f2);

int main(void){
fract f1, f2, f3;
char key;

printf ("Enter the n & d for f1 ");
scanf ("%f %f", &f1.n, &f1.d);

printf ("Enter the n & d for f2 ");
scanf ("%f %f", &f2.n, &f2.d);

printf ("f3 = %f/%f\n", f3.n, f3.d);

return (0);
}

fract f;
int common, temp1, temp2;

if (f1.d != f2.d){
common = f1.d * f2.d;

temp1 = common / f1.d;
temp2 = common / f2.d;

f1.n = f1.n * temp1;
f2.n = f2.n * temp2;

f.n = f1.n + f2.n;
f.d = common;
}
else{
f.n = f1.n + f2.n;
f.d = f1.d;
}
return f;
}
LVL 2
###### Who is Participating?

x

Commented:
Voila!

#include <stdio.h>

typedef struct{
double n;
double d;
}fract;

fract subtract_fract(fract f1, fract f2);
fract multiply_fract(fract f1, fract f2);
fract divide_fract(fract f1, fract f2);

int main(void){
fract f1, f2, f3;
char key;

printf ("Enter the n & d for f1 ");
scanf ("%lf %lf", &f1.n, &f1.d);

printf ("Enter the n & d for f2 ");
scanf ("%lf %lf", &f2.n, &f2.d);

printf ("f3 = %lf/%lf\n", f3.n, f3.d);

return (0);
}

fract f;
int common, temp1, temp2;

if (f1.d != f2.d){
common = f1.d * f2.d;

temp1 = common / f1.d;
temp2 = common / f2.d;

f1.n = f1.n * temp1;
f2.n = f2.n * temp2;

f.n = f1.n + f2.n;
f.d = common;
}
else{
f.n = f1.n + f2.n;
f.d = f1.d;
}
return f;
}
0

Commented:
it a joke to give only 5 point for a questions like that but i"ll try to help you anyway

but i have a question first what did you mean about the "int" and the "double"???
0

Author Commented:
I mean the declaration in the structure. It's okay for the output if it is "int", but not for "double". Thanks !
0

Commented:
first the add func is very stupid you
use:

common = f1.d * f2.d;

temp1 = common / f1.d;
temp2 = common / f2.d;

f1.n = f1.n * temp1;
f2.n = f2.n * temp2;

but temp1=f2.d
and temp2=f1.d
so why to use the temp

second i still don't know so first check with the debuger
if you don't lost any data when you entered the add func
i mean check f1.n,f1.d,f2.n,f2.d
when you just enter the func
0

Commented:
common is int
wheras fract members are double.
Did you give that intentionally or is it a mistake. common = f1.d*f2.d wont give proper result to common.
0

Commented:
I forgot to mention.  I believe the problem was the use of %f in scanf, you need to use %lf in scanf & printf with a double (thats all I changed). %f would be used for a float.  That lets you get the data into your program so you can test it out.

A double is a sort of 'long float'

0

Commented:
try to use common,temp1,temp2 as doubles
else they will be rounded
0

Author Commented:
Very good. I can make it work now. Thanks for the remind. Cause I was totally forgot the %lf. Thanks

clo1
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.