如何在另一个函数中使用函数的返回值?
问题描述:
这是我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来说比较新。
答
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)。只要函数返回,这些变量就会超出范围,地址将无效,从而产生未定义的行为。 尝试使用您的指针参数。
请尝试将您的代码减少到[MCVE](https://stackoverflow.com/help/mcve)。 – 5gon12eder 2014-12-07 21:27:08