如何在另一种类型的函数中使用一种类型的函数?

时间:2013-02-03 04:20:24

标签: c

我有一个功能,即打印菜单并返回选项。另一个函数来计算我从用户那里获得的2个数字。现在,计算是从第一个函数返回选择返回,并且我真的不知道在两个不同类型的函数一起使用的正确方法是什么...这是两个函数:

float calc(float number1, float number2)

{
    float answer;
    int operand;
    operand =get_choice();// problemmmm

}

char get_choice(void)

{
    char choice;

    printf("Enter the operation of your choice:\n");
    printf("a. add        s. subtract\n");
    printf("m. multiply   d. divide\n");
    printf("q. quit");

    while ((choice = getchar()) != 'q')
    {

        if (choice != 'a' || choice != 's' || choice != 'm' || choice != 'd')
        {
            printf("Enter the operation of your choice:\n");
            printf("a. add        s. subtract\n");
            printf("m. multiply   d. divide\n");
            printf("q. quit");
            continue;
        }
    }
    return choice;
}

我收到一条错误,说“在C99中get_choice的隐含功能无效”

4 个答案:

答案 0 :(得分:1)

隐式函数错误可能意味着编译器在调用时到达行时尚不知道get_choice函数。您可以通过以下方式解决此问题。

  1. 更改编写函数的顺序。在calc函数之前写入get_choice

  2. 在calc函数之前为get_choice函数添加声明。声明只是函数名称和类型,没有代码:

    char get_choice(void);
    
  3. 如果您想知道消息是什么,在C89中,未声明的函数被隐式假定为返回一个整数。 C99更严格并强制您始终声明函数,但错误消息仍然引用C89样式隐式声明。

答案 1 :(得分:0)

您是否尝试根据操作员执行不同的计算?您可以使用函数指针来实现它。即,编写一个字典,将每个选项('a','s','m','d')分别映射到函数指针类型float (*)(float, float)的操作(加,减,乘,除)。 / p>

顺便说一句,如果你还没有声明get_choice,你应该把它的功能体放在calc之前。 另一个问题是get_choice(void)返回char,但您将操作数声明为int

答案 2 :(得分:0)

  

我收到一条错误,说“在C99中get_choice的隐含功能无效”

在C中,你需要在调用之前声明一个函数;否则编译器不知道返回类型应该是什么。

你可以做两件事之一。一,您可以在调用之前声明get_choice函数:

float calc(float number1, float number2)
{
    float answer;
    int operand;

    char get_choice(void);

    operand =get_choice();// problemmmm
}

或者,您可以切换定义函数的顺序,以便get_choice函数在调用之前定义(我的首选项)。

答案 3 :(得分:0)

I C / C ++,编译器需要知道标识符的类型(大小),但不知道它拥有的特定值(如果是变量)。这称为forward declaration

在您的情况下,当您从get_choice()调用时,编译器不会知道calc()