这是我的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 :(得分:1)
在ReadNumbers函数中,将两个局部变量的地址分配给指针参数(int x1,int x2)。一旦函数返回,这些变量就会超出范围,并且地址将无效,从而产生未定义的行为。 请尝试使用指针参数。
答案 1 :(得分:0)
你应该编码,例如
int p1 = 1, p2 = 2;
float q = divide(p1, p2);
然后在同一个块中使用q
。 BTW,函数调用可以嵌套,例如比如在q = divide(p1, substract(p1, p2));
您需要详细了解programming in C。
别忘了启用所有警告&amp;在编译器中调试信息,例如通过编译:
gcc -Wall -Wextra -g yoursource.c -o yourprog
然后使用gdb
- 或其他一些调试器 - (例如gdb ./yourprog
)