【问题标题】:How do I use the return value of a function in another one? [closed]如何在另一个函数中使用函数的返回值? [关闭]
【发布时间】:2015-02-05 12:27:13
【问题描述】:

这是我的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 比较陌生。

【问题讨论】:

  • 请尝试将您的代码缩减为MCVE

标签: c function return return-value scanf


【解决方案1】:

你应该编码例如

        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 - 或其他一些调试器-(例如gdb ./yourprog

【讨论】:

    【解决方案2】:

    在您的 ReadNumbers 函数中,您将两个局部变量的地址分配给您的指针参数(int x1,int x2)。一旦函数返回,这些变量就会超出范围,并且地址将无效,从而产生未定义的行为。 请尝试使用您的指针参数。

    【讨论】:

      猜你喜欢
      • 2013-02-10
      • 2022-11-23
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多