pow type problem

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Bill Cunningham

    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_FAILU RE);
    }
    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


  • Bill Cunningham

    #2
    Re: pow type problem

    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


    Comment

    • Walter Roberson

      #3
      Re: pow type problem

      In article <z3J_j.3440$tF1 .560@trnddc01>,
      Bill Cunningham <nospam@nspam.c omwrote:
      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_FAILU RE);
      }
      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

      Comment

      • Keith Thompson

        #4
        Re: pow type problem

        "Bill Cunningham" <nospam@nspam.c omwrites:
        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_FAILU RE);
        }
        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_Keit h) kst-u@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"

        Comment

        • Bill Cunningham

          #5
          Re: pow type problem


          "Walter Roberson" <roberson@ibd.n rc-cnrc.gc.cawrote in message
          news:g1fn48$k1i $1@canopus.cc.u manitoba.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


          Comment

          • Bill Cunningham

            #6
            Re: pow type problem


            "Keith Thompson" <kst-u@mib.orgwrote in message
            news:ln63t0tuou .fsf@nuthaus.mi b.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


            Comment

            • Nick Keighley

              #7
              Re: pow type problem

              On 27 May, 02:01, "Bill Cunningham" <nos...@nspam.c omwrote:
              #include <stdio.h>
              #include <stdlib.h>
              #include <math.h>
              >
              int
              main (int argc, char *argv[])
              {
                if (argc != 4)
                  {
                    puts ("usage error");
                    exit(EXIT_FAILU RE);
                  }
                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

              Comment

              Working...