2015-10-17 53 views
0

我想從主 調用所有三個函數,並在主函數 的主函數定義中打印結果我找不到如何做到這一點,我已經創建了我需要的所有函數和指針。如何在C中打印出我的主要功能?

#include <math.h> 
#include <stdio.h> 
#define _CRT_SECURE_NO_WARNINGS //to avoid scanf warning or error 
int CalculateSum(int num1, int num2); 
int CalculateProduct(int num1, int num2); 
void CalculateBoth(int num1, int num2, int*sumPtr, int *prodPtr); 
int main(void) 
{ 



} 
int CalculateSum(int num1, int num2) 
{ 
    int temp1; 
    num1 = 1; 
    num2 = 2; 
    temp1 = num1 + num2; 
    //printf("calculatesum value %d ", temp1); 
    return (temp1); 

} 
int CalculateProduct(int num1, int num2) 
{ 
    num1 = 3; 
     num2 = 4; 
    int temp2; 
    temp2 = num1*num2; 
    printf("calc product %d ", temp2); 
     return temp2; 

} 


void CalculateBoth(int num1, int num2, int*sumPtr, int *prodPtr) 
{ 
    num1 = 5; 
    num2 = 6; 
    int temp3 = num1 + num2; 
    sumPtr = &temp3; 
    int temp4 = num1*num2; 
    prodPtr = temp4; 
    printf("calc sumptr %d ", temp3); 
    printf("Calc both prodptr %d ", temp4); 

} 

回答

-1

如果要返回多個值,則從函數返回數組。

int * CalculateBoth(int num1, int num2, int*sumPtr, int *prodPtr) 
{ 
    num1 = 5; 
    num2 = 6; 
    int arr[2]; 
    arr[0] = num1 + num2; 
    sumPtr = &temp3; 
    arr[1] = num1*num2; 
    prodPtr = temp4; 
    printf("calc sumptr %d ", temp3); 
    printf("Calc both prodptr %d ", temp4); 
    return arr; 
} 

,然後在主

int main() 
{ 
int *p; 
p=CalculateBoth(...); 
printf("%d %d",p[0],p[1]); 
return 0; 
} 
+0

是你確定這會起作用嗎?寫入時嘗試爲'p [1]'賦值時會發生什麼? –

1

嗯,很明顯,你需要一點幫助。你的功能並不完全符合你期望的功能。對於初學者,您通過num1num2的功能。爲了發生這種情況,他們必須在主要地方宣佈。除了num1num2,您需要聲明變量以保留前兩個函數的返回值,例如sumprod。這些變量也是您將傳遞給CalculateBoth函數的指針的相同變量,以便它們的值在main()中更新並可用。一個簡單的定義是main()是所有你需要:

/* declare and initialize variables */ 
int n1 = 0, n2 = 0, sum = 0, prod = 0; 

雖然沒有什麼不對改變一個變量的值的函數,如你的所有功能寫的,你徹底擊垮傳遞num1的目的, num2的功能。看起來您打算將num1num2的值傳遞給每個函數,而不是更改函數中的值。例如,在main()你希望看到:

/* CalculateSum */ 
n1 = 1, n2 = 2; 
sum = CalculateSum (n1, n2); 

/* CalculateProduct */ 
n1 = 3, n2 = 4; 
prod = CalculateProduct (n1, n2); 

/* CalculateBoth (passing pointer to have value back in main()) */ 
n1 = 5, n2 = 6; 
CalculateBoth (n1, n2, &sum, &prod); 

你的任務的剩餘部分是簡單的功能main()打印值(sumprod,或both),並再次以確保您已成功更新了函數範圍內的值以及main()(函數本身)。以下顯示了在函數和main中簡單添加相同的打印語句。如果您有任何問題,請告訴我。

#include <stdio.h> 

#define _CRT_SECURE_NO_WARNINGS // I'll take your word for it... 

int CalculateSum (int num1, int num2); 
int CalculateProduct (int num1, int num2); 
void CalculateBoth (int num1, int num2, int *sumPtr, int *prodPtr); 

int main(void) 
{ 
    /* declare and initialize variables */ 
    int n1 = 0, n2 = 0, sum = 0, prod = 0; 

    /* CalculateSum */ 
    n1 = 1, n2 = 2; 
    sum = CalculateSum (n1, n2); 
    printf (" calculatesum value %d\n", sum); 

    /* CalculateProduct */ 
    n1 = 3, n2 = 4; 
    prod = CalculateProduct (n1, n2); 
    printf (" calc product %d\n", prod); 

    /* CalculateBoth (passing pointer to have value back in main()) */ 
    n1 = 5, n2 = 6; 
    CalculateBoth (n1, n2, &sum, &prod); 
    printf(" calc both sumPtr %d\n", sum); 
    printf(" calc both prodPtr %d\n", prod); 


    return 0; 
} 

int CalculateSum (int num1, int num2) 
{ 
    int sum; 
    sum = num1 + num2; 

    printf ("\n calculatesum value %d\n", sum); 

    return sum; 
} 

int CalculateProduct (int num1, int num2) 
{ 
    int prod; 
    prod = num1 * num2; 
    printf ("\n calc product %d\n", prod); 

    return prod; 
} 

void CalculateBoth (int num1, int num2, int *sumPtr, int *prodPtr) 
{ 
    int sum = num1 + num2; 
    *sumPtr = sum; 

    int prod = num1 * num2; 
    *prodPtr = prod; 

    printf("\n calc both sumPtr %d\n", sum); 
    printf(" calc both prodPtr %d\n", prod); 
} 

輸出

如果你的代碼仔細觀察,你會看到正在打印無論是在功能和主同樣的事情:

$ ./bin/fncinmain 

calculatesum value 3 
calculatesum value 3 

calc product 12 
calc product 12 

calc both sumPtr 11 
calc both prodPtr 30 
calc both sumPtr 11 
calc both prodPtr 30 
0
#include <math.h> 
#include <stdio.h> 
#include <conio.h> 
#define  _CRT_SECURE_NO_WARNINGS  //to avoid scanf warning or error 
int CalculateSum(int num1, int num2); 
int CalculateProduct(int num1, int num2); 
void CalculateBoth(int num1, int num2, int*sumPtr, int *prodPtr); 

int main(void) { 
    int x = 5, y = 6, prod, sum; 
    sum = CalculateSum(x, y); 
    prod = CalulateProduct(x, y); 
    printf("sum=%d Product=%d", x, y); 
    printf("now calulate both at once"); 


    x = 4; 
    y = 3; 
    CalculateBoth(x, y, &sum, &prod); 
    printf("%d %d", sum, prod); 
    getch(); 
    return 0; 

} 

int CalculateSum(int num1, int num2) { 
    int temp1; 
    temp1 = num1 + num2; 
    printf("calculatesum value %d ", temp1); 
    return (temp1); 

} 

int CalculateProduct(int num1, int num2) { 
    int temp2; 
    temp2 = num1*num2; 
    printf("calc product %d ", temp2); 
    return temp2; 

} 

void CalculateBoth(int num1, int num2, int* sumPtr, int *prodPtr) { 
    int temp1, temp2; 
    temp1 = num1 + num2; 
    *sumPtr = temp1; 
    temp2 = num1*num2; 
    *prodPtr = temp2; 
    printf("calc sumptr %d ", temp1); 
    printf("Calc both prodptr %d ", temp2); 

}