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

时间:2014-12-07 21:24:09

标签: c function return return-value scanf

这是我的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来说比较新。

2 个答案:

答案 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