Function returning function pointer : help

This is a discussion on Function returning function pointer : help within the C Programming forums, part of the General Programming Boards category; I wrote following program, Its compiling without errors but giving wrong output. output should be 2 but giving 0; Can ...

  1. #1
    Registered User
    Join Date
    Sep 2012
    Posts
    8

    Function returning function pointer : help

    I wrote following program,
    Its compiling without errors but giving wrong output.
    output should be 2 but giving 0;
    Can anybody tell me what is my mistake?
    Thanx in avd.

    Code:
    float Plus    (float a, float b) { return a+b; }
    float Minus   (float a, float b) { return a-b; }
    /*
     * Solution using a typedef: 
     * Define a pointer to a function which is taking
     * two floats and returns a float
     */
    typedef float(*Op_fptr)(float, float);
    /*
     * Function takes a char and returns a function pointer. <opCode> specifies which function to return
     */
    Op_fptr GetPtr2(const char opCode)
    {
       if(opCode == '+')
          return &Plus;
       else
          return &Minus; // default if invalid operator was passed
    }
    int main()
    {
       /* float (*pt2Function)(float, float) =  NULL; */
       Op_fptr pt2Function;
       pt2Function=GetPtr2('-');   // get function pointer from function 'GetPtr2'
       printf("minus %d\n",(*pt2Function)(4, 2));   // call function using the pointer
      return 0;
    }

  2. #2
    - - - - - - - - oogabooga's Avatar
    Join Date
    Jan 2008
    Posts
    2,808
    Your problem is that in printf you're using %d where you should be using %f. Turning up the warning level on your compiler should tell you that.
    The cost of software maintenance increases with the square of the programmer's creativity. - Robert D. Bliss

  3. #3
    Registered User
    Join Date
    Sep 2012
    Posts
    8

    Thanx

    Quote Originally Posted by oogabooga View Post
    Your problem is that in printf you're using %d where you should be using %f. Turning up the warning level on your compiler should tell you that.
    Thanx oogabooga,
    Its solved and with option -Wall its showing that warning too.

  4. #4
    Registered User
    Join Date
    Sep 2012
    Posts
    8
    Hi,

    again some problem,

    In above program if I add scanf then its giving following warnings with -Wall options.

    temp1.c:24: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’
    temp1.c:24: warning: format ‘%d’ expects type ‘int *’, but argument 3 has type ‘int’
    temp1.c:24: warning: format ‘%c’ expects type ‘char *’, but argument 4 has type ‘int’

    if I run the program then it ending in segmentation fault.

    TIA.

    Code:
      1 #include<stdio.h>
      2 
      3 float Plus    (float a, float b) { return a+b; }
      4 float Minus   (float a, float b) { return a-b; }
      5 /*
      6  * Solution using a typedef: 
      7  * Define a pointer to a function which is taking
      8  * two floats and returns a float
      9  */
     10 typedef float(*Op_fptr)(float, float);
     11 Op_fptr GetPtr2(const char opCode)
     12 {
     13    if(opCode == '+')
     14       return &Plus;
     15    else
     16       return &Minus;
     17 }
     18 int main()
     19 {
     20    int a=0,b=0;
     21    char c = '+';
     22    //float (*pt2Function)(float, float) =  NULL;
     23    Op_fptr pt2Function;
     24    scanf("%d %d %c",a,b,c);
     25    pt2Function=GetPtr2(c);   // get function pointer from function 'GetPtr2'
     26    printf("minus %f\n",(*pt2Function)(a, b));   // call function using the pointer
     27   return 0;
     28 }

  5. #5
    Registered User
    Join Date
    Sep 2012
    Posts
    8
    If I used %f in scanf then also it is giving similar warnings,

    temp1.c:24: warning: format ‘%f’ expects type ‘float *’, but argument 2 has type ‘int’
    temp1.c:24: warning: format ‘%f’ expects type ‘float *’, but argument 3 has type ‘int’
    temp1.c:24: warning: format ‘%c’ expects type ‘char *’, but argument 4 has type ‘int’

  6. #6
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    21,780
    This:
    Code:
    scanf("%d %d %c",a,b,c);
    should be:
    Code:
    scanf("%d %d %c", &a, &b, &c);
    C + C++ Compiler: MinGW port of GCC
    Version Control System: Bazaar

    Look up a C++ Reference and learn How To Ask Questions The Smart Way

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Returning a function pointer from a function
    By StainedBlue in forum C++ Programming
    Replies: 4
    Last Post: 11-01-2010, 10:26 PM
  2. Function returning pointer to function
    By DL1 in forum C++ Programming
    Replies: 6
    Last Post: 08-07-2009, 10:27 AM
  3. Returning pointer to function from function
    By Bargi in forum C Programming
    Replies: 7
    Last Post: 06-09-2008, 01:43 AM
  4. Returning pointer from function question
    By Rune Hunter in forum C++ Programming
    Replies: 12
    Last Post: 07-12-2007, 09:45 AM
  5. function returning pointer
    By blue_gene in forum C Programming
    Replies: 7
    Last Post: 04-19-2004, 02:35 PM

Tags for this Thread


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21