如何在另一个函数中使用函数的返回值?

问题描述:

这是我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

 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

在你ReadNumbers功能,您分配两个局部变量的地址,以您的指针参数(INT X1,INT X2)。只要函数返回,这些变量就会超出范围,地址将无效,从而产生未定义的行为。 尝试使用您的指针参数。