2011-02-27 15 views
2

ある関数から別の関数に変数を渡そうとしています。例えば同様Cでの変数の受け渡し

FUNCA:ユーザーからの3つの入力に取り、私はfuncBの中で、これらの3つの入力を使用します。

どうすればいいですか?私はFuncAから3つの値を返して、それを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) 
{ 
    ............. 
} 
+3

'A、B、Cを返す;'だけ 'C'の値を返します。カンマ式の左辺オペランドは効果がありません。 – Mahesh

答えて

7

まず、あなたができるだけreturnつの値:私は、セットアップ、このようなあなたのシステムだろう

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

FuncAがintを返しています。 FuncBをA、B、Cのパラメータで呼び出して、FuncBが返すものがあればFuncAの呼び出し元に戻すと仮定します。機能ごとの

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

FuncBに以前のパラメータinintがある場合でもFuncB(A、B、C)を返しますか? –

4

。おそらくFuncAからA、B、Cの値を取得することは可能ですか?

あなたはポインタについてどれだけ知っていますか?あなたはポインタが何であるか、どのように機能するかをしっかりと把握していなければ、解決策を理解することは難しいでしょう。

解決策は、FuncAが値を割り当てることができるように、3つのポインタ(A、B、およびCの1つ)を渡すことです。これはreturnキーワードを使用しません。今では、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 A, B, C; 
int FuncA(void); 
int FuncB(int A, int B, int C); 
.... 

をし、任意の関数からもアクセス:グローバル変数として

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

宣言A、BおよびC:あなたは、最終的なコードは次のようになります。または、グローバルスコープの可能性のある損傷を制限するために静的グローバルを宣言します。

+2

グローバル変数は悪いと見なされます。http://stackoverflow.com/questions/484635/are-global-variables-bad – hlovdal

5

一つのアプローチ:

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); 
    ... 
} 
関連する問題