Thao Nguyen
Thao Nguyen

Reputation: 901

Passing and returning variables in C

I'm trying to pass variables from one function to another.

Like for example:

FuncA: takes in 3 inputs from the user and I want to use those 3 inputs in FuncB.

How would I do that? Would I just return the 3 values from FuncA and just pass it in as parameter of Func B?

Would I do something like this? **Without using pointers.

int FuncA(void);
int FuncB(int A, int B, int C, int D, int E);

int main(void)
{
    FuncA(void);
    FuncB(A,B,C);
}

int FuncA(void)
{
    printf("Enter 3 number:");
    scanf("%d %d %d" &A, &B, &C);
    return A, B, C;
}

int FuncB(int A, int B, int C)
{
    .............
}

Upvotes: 3

Views: 47786

Answers (5)

Jim Balter
Jim Balter

Reputation: 16406

One approach:

typedef struct {
  int a;
  int b;
  int c;
} ABC;

ABC funcA(void);
{
    ABC abc;
    printf("Enter 3 numbers: ");
    fflush(stdout);
    scanf("%d %d %d", &abc.a, &abc.b, &abc.c);
    return abc;
}

void funcB1(ABC abc)
{
    ...
}

void funcB2(int a, int b, int c)
{
    ...
}

int main(void)
{
    funcB1(funcA());  // one alternative

    ABC result = funcA();  // another alternative
    funcB2(result.a, result.b, result.c);
    ...
}

Upvotes: 5

user142162
user142162

Reputation:

I would setup your system like this:

void FuncA(int *A, int *B, int *C);
int FuncB(int A, int B, int C);

int main(void)
{
  // Declare your variables here
  int A, B, C;
  // Pass the addresses of the above variables to FuncA
  FuncA(&A, &B, &C);
  // Pass the values to FuncB
  FuncB(A, B, C);
}

void FuncA(int *A, int *B, int *C)
{ 
  printf("Enter 3 numbers: ");
  fflush(stdout);
  scanf("%d %d %d", A, B, C);
}

int FuncB(int A, int B, int C)
{
    //...
}

Upvotes: 4

hotpaw2
hotpaw2

Reputation: 70733

Declare A, B and C as global variables:

int A, B, C;
int FuncA(void);
int FuncB(int A, int B, int C);
....

and access them from any function, whether parameters or not. Or declare them static globals to limit the possible damage of global scoping.

Upvotes: -3

Marlon
Marlon

Reputation: 20312

Firstly, you can only return one value per function. This will probably make you ask, "how is it possible to get the values for A, B, and C from FuncA?"

How much do you know about pointers? The solution will be difficult to understand if you do not have a firm grip of what pointers are and how they work.

The solution is to pass 3 pointers (one for A, B, and C) so that FuncA can assign a value to them. This doesn't use the return keyword. It's assigning values at a specific location in memory which is, A, B, and C.

int FuncA(int* A, int* B, int* C)
{
    printf("Enter 3 number:");
    scanf("%d %d %d", A, B, C);
}

Now that A, B, and C contain the user input, we can pass those values to FuncB. You final code should look like this:

int FuncA(int* A, int* B, int *C);
int FuncB(int A, int B, int C);

int main(void)
{
    int A;
    int B;
    int C;

    FuncA(&A, &B, &C);
    FuncB(A, B, C);
}

int FuncA(int* A, int* B, int* C)
{
    printf("Enter 3 number:");
    scanf("%d %d %d", A, B, C);
}

int FuncB(int A, int B, int C)
{
    // ...
}

Upvotes: 7

Bala R
Bala R

Reputation: 108977

FuncA is returning an int. Assuming you want to call FuncB with A,B,C parametersa and return to the caller of FuncA whatever FuncB returns, you want something like this.

int FuncA(void)
{ 
printf("Enter 3 number:");
scanf("%d %d %d" &A, &B, &C);
return FuncB(A, B, C);
}

Upvotes: 0

Related Questions