• 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 add_fract(fract f1, fract f2);
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);

  f3 = add_fract(f1, f2);

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

  return (0);
}

fract add_fract(fract f1, fract f2){
  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
clo1Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
deightonConnect With a Mentor Commented:
Voila!

                   #include <stdio.h>

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

                   fract add_fract(fract f1, fract f2);
                   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);

                     f3 = add_fract(f1, f2);

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

                     return (0);
                   }

                   fract add_fract(fract f1, fract f2){
                     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
 
ntdragonCommented:
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
 
clo1Author Commented:
I mean the declaration in the structure. It's okay for the output if it is "int", but not for "double". Thanks !
0
Improved Protection from Phishing Attacks

WatchGuard DNSWatch reduces malware infections by detecting and blocking malicious DNS requests, improving your ability to protect employees from phishing attacks. Learn more about our newest service included in Total Security Suite today!

 
ntdragonCommented:
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
 
daks2003Commented:
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
 
deightonCommented:
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
 
ntdragonCommented:
try to use common,temp1,temp2 as doubles
else they will be rounded
0
 
clo1Author 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.

All Courses

From novice to tech pro — start learning today.