2014-12-07 100 views
-1

這是我main.c如何在另一個函數中使用函數的返回值?

#include<stdio.h> 
#include<stdlib.h> 

int main() { 
    printHeadline(); 
    function1(); 
    int i; 

    for (i = 0; i < 1000; i++) { 
    menu(); 
    if (menu() == 1) { 
     return 0; 
    } else if (menu() == 2) { 
     int p1 = 1, p2 = 2; 
     ReadNumbers(&p1, &p2); 
    } else if (menu() == 3) { 
     int p1 = 1, p2 = 2; 
     add(&p1, &p2); 
    } else if (menu() == 4) { 
     int p1 = 1, p2 = 2; 
     subtract(&p1, &p2); 
    } else if (menu() == 5) { 
     int p1 = 1, p2 = 2; 
     divide(&p1, &p2); 
    } else if (menu() == 6) { 
     int p1 = 1, p2 = 2; 
     multiply(&p1, &p2); 
    } 
    } 
} 

這是我functions.c

#include <stdio.h> 
#include <stdlib.h> 

int add(int x1, int x2) { 
    return x1 + x2; 
} 

int subtract(int x1, int x2) { 
    return x1 - x2; 
} 

float divide(int x1, int x2) { 
    return x1/x2; 
} 

int multiply(int x1, int x2) { 
    return x1 * x2; 
} 

void ReadNumbers(int *p1, int *p2) { 
    int x1; 
    int x2; 
    printf("Integer 1:"); 
    scanf("%d", &x1); 

    printf("Integer 2:"); 
    scanf("%d", &x2); 

    *p1 = x1; 
    *p2 = x2; 
} 

int menu() { 
    int i; 

    for (i = 0; i < 10; ++i) { 
    printf("\n\nChoose from menu:\n1. Exit\n2. Read two numbers\n3. Add\n4. Subtract\n5.  Divide\n6. Multiply\n\nYour choice: "); 
    scanf("%d", &menu); 

    if (menu == 1 || menu == 2 || menu == 3 || menu == 4 || menu == 5 || menu == 6) 
     return menu; 
    else 
     ++i; 
    fflush(stdin); 
    } 
} 

在選擇菜單中的一個號碼時程序崩潰的時刻。我試過調試,它指向這條線:

scanf("%d", &menu); 

不確定要去哪裏或下一步做什麼。我嘗試了一堆東西,但我對C來說比較新。

+0

請嘗試將您的代碼減少到[MCVE](https://stackoverflow.com/help/mcve)。 – 5gon12eder 2014-12-07 21:27:08

回答

0

 int p1 = 1, p2 = 2; 
     float q = divide(p1, p2); 

然後在同一個塊中使用q。順便說一下,函數調用可以嵌套,例如像在
q = divide(p1, substract(p1, p2));

您需要了解更多關於programming in C的信息。

不要忘記在編譯器中啓用所有警告&調試信息,例如通過編譯:

gcc -Wall -Wextra -g yoursource.c -o yourprog 

然後使用gdb - 或者一些其他的debugger-(如爲gdb ./yourprog

1

在你ReadNumbers功能,您分配兩個局部變量的地址,以您的指針參數(INT X1,INT X2)。只要函數返回,這些變量就會超出範圍,地址將無效,從而產生未定義的行爲。 嘗試使用您的指針參數。

相關問題