Home > Back-end >  Function returns different numbers when called in another function
Function returns different numbers when called in another function

Time:11-09

\ I've created a practice project for my test and I can't seem to get around this problem. I need a function that grabs the input and when called in another function, the input will be used to solve a problem. \ here is my code


#include <stdio.h>

int get()
{
    int one,two,three,four;
    scanf("%d %d %d %d", &one, &two, &three, &four);
    return one,two,three,four;
}

int add()
{

    int one,two,three,four;
    int result1, result2, result3;
    get();
    result1 = one   two;
    
    if (result1 == three)
    {
    result2 = four - three;
    result3 = result2   four;
    printf("Added %d, 5th number is %d", result2, result3);
    }
    else
    {
        printf("error, %d %d %d %d", one, two, three, four);
    }
    
}

int main()
{
    add();
    
    return 0;
}


When I put the scanf statement inside the function, it works. But when I use the function to get the input, I get different numbers

CodePudding user response:

In the return statement of the function get

return one,two,three,four;

there is an expression with the comma operator. Its value is the value of the last operand. That is the function returns the value of the variable four.

And moreover the returned value is not used in the caller. So you are dealing with uninitialized variables within the function add.

If you need to return four values then return them trough parameters by reference. For example

void get( int *one, int *two, int *three, int *four;)
{
    scanf("%d %d %d %d", one, two, three, four);
}

and call the function like

get( &one, &two, &three, &four );

Or the function can return an integer that will signal whether the input was successful as for example

int get( int *one, int *two, int *three, int *four;)
{
    return scanf("%d %d %d %d", one, two, three, four) == 4;
}

You can check the return value in the function add before performing calculations.

Pay attention to that the function add returns nothing. So declared its return type as void.

void add( void );

CodePudding user response:

  1. In the function get() the variables one,two,three,four are stored on the stack and are not available outsite of this function.
  2. You can return only one value with get()
  3. You have to store the return value to the specific variable result1= get()
  4. If you want return more information at once, you should work with struct
  • Related