470,848 Members | 1,249 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,848 developers. It's quick & easy.

pow type problem

Is this one of those rare instances where casts are needed? I have this
code and the compiler complains that the prototypes are wrong.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int
main (int argc, char *argv[])
{
if (argc != 4)
{
puts ("usage error");
exit(EXIT_FAILURE);
}
double x, y;
x = strtod (argv[1], NULL);
y = strtod (argv[2], NULL);
printf ("%.2f\n", pow (argv[1], argv[2]));
return 0;
}

And I did try to link with libm.a

Bill
Jun 27 '08 #1
6 1162
Ok I see now. Sorry false alarm. I see a couple of errors in the code.
D?mn. The pow needs xand y Sorry again.

Bill
Jun 27 '08 #2
In article <z3J_j.3440$tF1.560@trnddc01>,
Bill Cunningham <no****@nspam.comwrote:
Is this one of those rare instances where casts are needed? I have this
code and the compiler complains that the prototypes are wrong.
>#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int
main (int argc, char *argv[])
{
if (argc != 4)
{
puts ("usage error");
exit(EXIT_FAILURE);
}
double x, y;
x = strtod (argv[1], NULL);
y = strtod (argv[2], NULL);
printf ("%.2f\n", pow (argv[1], argv[2]));
It would seem to me to make more sense to use

printf ("%.2f\n", pow (x, y));
return 0;
}
And I did try to link with libm.a

Question: what are you expecting in argv[3] ? You exit the program
if argc != 4 but you do not make use of the 4th argument, just
the 2nd and 3rd (it being quite understandable why you aren't making
use of the 1st argument.)
--
"Whenever there is a hard job to be done I assign it to a lazy
man; he is sure to find an easy way of doing it."
-- Walter Chrysler
Jun 27 '08 #3
"Bill Cunningham" <no****@nspam.comwrites:
Is this one of those rare instances where casts are needed? I have this
code and the compiler complains that the prototypes are wrong.
No, no casts are needed.

Presumably your compiler is complaining that the call is wrong, not
that the prototype is wrong.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int
main (int argc, char *argv[])
{
if (argc != 4)
{
puts ("usage error");
exit(EXIT_FAILURE);
}
You use only the first two arguments. Why do you want argc to be 4
rather than 3?
double x, y;
x = strtod (argv[1], NULL);
y = strtod (argv[2], NULL);
printf ("%.2f\n", pow (argv[1], argv[2]));
argv[1] and argv[2] are of type char*. pow expects two arguments of
type double.

You've just declared and assigned values to two objects x and y of
type double, but you never use them.

Think about it.
return 0;
}

And I did try to link with libm.a
--
Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>
Nokia
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
Jun 27 '08 #4

"Walter Roberson" <ro******@ibd.nrc-cnrc.gc.cawrote in message
news:g1**********@canopus.cc.umanitoba.ca...
Question: what are you expecting in argv[3] ? You exit the program
if argc != 4 but you do not make use of the 4th argument, just
the 2nd and 3rd (it being quite understandable why you aren't making
use of the 1st argument.)
4 was one of the bugs. I didn't see it until after I posted. Sorry.

Bill
Jun 27 '08 #5

"Keith Thompson" <ks***@mib.orgwrote in message
news:ln************@nuthaus.mib.org...
argv[1] and argv[2] are of type char*. pow expects two arguments of
type double.

You've just declared and assigned values to two objects x and y of
type double, but you never use them.

Think about it.
> return 0;
}

And I did try to link with libm.a
Thanks.

Bill
Jun 27 '08 #6
On 27 May, 02:01, "Bill Cunningham" <nos...@nspam.comwrote:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int
main (int argc, char *argv[])
{
* if (argc != 4)
* * {
* * * puts ("usage error");
* * * exit(EXIT_FAILURE);
* * }
* double x, y;
you can't mix statements and declarations in C90.
For C90 compilance put the double x, y;
before the if

* x = strtod (argv[1], NULL);
* y = strtod (argv[2], NULL);
* printf ("%.2f\n", pow (argv[1], argv[2]));
* return 0;

}

--
Nick Keighley

Jun 27 '08 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

17 posts views Thread by Sean Ross | last post: by
1 post views Thread by Geoff Biggs | last post: by
reply views Thread by Nashat Wanly | last post: by
12 posts views Thread by Joel Byrd | last post: by
reply views Thread by StephQ | last post: by
1 post views Thread by =?ISO-8859-1?Q?Lasse_V=E5gs=E6ther_Karlsen?= | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.