2012-02-28 28 views
0

私には疑問があります。私は、関数から2つの数値を取得し、メインに戻すプログラムを作成しようとしています。そこでは、それらを使用することができます。しかし、以下のコードを実行すると、返される値は常にゼロになります。私の指針を変えるべきでしょうか?関数への整数ポインタ

#include <stdio.h> 

void get(int *num1, int *num2); 

int main(void) 
{ 
    int num1, num2, input; 
    get(&num1, &num2); 

    printf("Num1 is %d and num2 is %d.\n", num1, num2); 
    return 0; 
} 

void get(int *num1, int *num2) 
{ 
    printf("Enter two numbers. \n"); 
    printf("Number 1: \n"); 
    scanf("%d", &num1); 

    printf("Number 2: \n"); 
    scanf("%d", &num2); 
    printf("In function, %d and %d.\n", num1, num2); 

    return; 
} 

答えて

2

まず、ダムの質問はありません。まあ、ありますが、これはnum1num2変数は整数にすでにポインタで、

get

:-)そのうちの一つではありません、あなたは&でそれらを接頭辞べきではありません。

ただし、はのポインタを逆参照してください。それを行う方法については、次のコードを参照してください(いくつかの美容上の変更は実際の質問にはあまり関係ありません)。

#include <stdio.h> 

void get(int *num1, int *num2) { 
    printf("Enter two numbers.\n"); 

    printf("Number 1: "); 
    scanf("%d", num1);         // << No & 

    printf("Number 2: "); 
    scanf("%d", num2);         // << No & 

    printf("In function, %d and %d.\n", *num1, *num2); // Add *'s 
} 

int main(void) { 
    int num1, num2, input; 
    get(&num1, &num2); 
    printf("Num1 is %d and num2 is %d.\n", num1, num2); 
    return 0; 
} 

サンプル実行:

Enter two numbers. 
Number 1: 5 
Number 2: 8 
In function, 5 and 8. 
Num1 is 5 and num2 is 8. 
+0

ちょっとああ、それは働きます!ありがとうございます=) –

1

NUM1とNUM2関数内では、既にポインタです。

このように、内部スキャンfは、& num1からnum1まで、& num2からnum2に変更されます。

#include <stdio.h> 


void get(int *num1, int *num2); 

int main(void) 
{ 
    int num1, num2, input; 
    get(&num1, &num2); 

    printf("Num1 is %d and num2 is %d.\n", num1, num2); 
    return 0; 
} 

void get(int *num1, int *num2) 
{ 
    printf("Enter two numbers. \n"); 
    printf("Number 1: \n"); 
    scanf("%d", num1); 

    printf("Number 2: \n"); 
    scanf("%d", num2); 
    printf("In function, %d and %d.\n", num1, num2); 

    return; 
} 
0

あなたはポインタに、ではない彼らが指すものに値を割り当てています。この

scanf("%d", num1); 

(++ Cで):このいずれかを試してみてください

void get(int &num1, int & num2) 
{ 
    ... 
    printf("Number 1: \n"); 
    scanf("%d", &num1); 
    ... 
    return; 
} 

int main(void) 
{ 
    ...  
    get(num1, num2); 
    ... 
    return 0; 
} 
+1

その2番目のサンプルはCではなくC++ですか?または参照がc1xに追加されましたか? – paxdiablo

+0

@paxdiablo、ありがとう、ありがとう。習慣の力。私は編集します... – Beta