2

我有一个功能可以打印菜单并返回选择。还有另一个函数来计算我从用户那里得到的 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;
}

我收到一条错误消息,提示“get_choice 的隐式函数在 C99 中无效”

4

4 回答 4

1

该隐式函数错误可能意味着编译器在调用该函数时还不知道该get_choice函数。您可以通过任一方式解决此问题。

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

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

    char get_choice(void);
    

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

于 2013-02-03T04:45:41.360 回答
0

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

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

于 2013-02-03T04:32:10.640 回答
0

我收到一条错误消息,提示“get_choice 的隐式函数在 C99 中无效”

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

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

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

    char get_choice(void);

    operand =get_choice();// problemmmm
}

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

于 2013-02-03T04:55:00.373 回答
0

IC/C++,编译器需要知道标识符的类型(大小),而不是它持有的特定值(如果是变量)。这称为前向声明

在您的情况下,编译器不知道get_choice()您何时从calc().

于 2013-02-03T05:00:17.060 回答