Передача и возврат переменных в C - PullRequest
2 голосов
/ 27 февраля 2011

Я пытаюсь передать переменные из одной функции в другую.

Как, например:

FuncA: принимает 3 ввода от пользователя, и я хочу использовать эти 3 входа вFuncB.

Как бы я это сделал?Могу ли я просто вернуть 3 значения из FuncA и просто передать их в качестве параметра Func B?

Буду ли я делать что-то подобное?** Без использования указателей.

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)
{
    .............
}

Ответы [ 5 ]

6 голосов
/ 27 февраля 2011

Во-первых, вы можете только return одно значение на функцию.Это, вероятно, заставит вас спросить: «Как можно получить значения для A, B и C из FuncA?»

Как много вы знаете о указателях?Решение будет трудно понять, если у вас нет четкого представления о том, что такое указатели и как они работают.

Решение состоит в том, чтобы передать 3 указателя (один для A, B и C), чтобы FuncAможет присвоить им значение.Это не использует ключевое слово return.Он присваивает значения в определенном месте в памяти, а именно, A, B и C.

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

Теперь, когда A, B и C содержат пользовательский ввод, мы можем передать эти значения в FuncB.Ваш окончательный код должен выглядеть следующим образом:

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)
{
    // ...
}
5 голосов
/ 27 февраля 2011

Один подход:

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);
    ...
}
4 голосов
/ 27 февраля 2011

Я бы настроил вашу систему так:

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)
{
    //...
}
0 голосов
/ 27 февраля 2011

Объявите A, B и C как глобальные переменные:

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

и доступ к ним из любой функции, будь то параметры или нет. Или объявите их статическими глобальными переменными, чтобы ограничить возможный ущерб глобальной области видимости.

0 голосов
/ 27 февраля 2011

FuncA возвращает int. Предполагая, что вы хотите вызвать FuncB с параметрами A, B, C и вернуть вызывающей стороне FuncA то, что FuncB возвращает, вы хотите что-то вроде этого.

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