weijun_zhang 发表于 2021-5-13 18:05:47

S1E30课后作业第2题——函数指针

S1E30课后作业第2题
题目:2. 请编写一个程序,要求用户输入两个数,分别计算它们加减乘除的结果。

请确保你的代码符合下面要求:
加减乘除分别由四个函数实现:add、sub、mul 和 divi
定义一个函数指针数组指向上面四个函数
只能通过函数指针的形式访问上面四个函数
需要支持浮点数,注意除数不能为 0
麻烦指点下下面编译通过的代码,问题出在哪里?

#include <stdio.h>

double plus(double a, double b);
double minus(double a, double b);
double product(double a, double b);
double devide(double a, double b);

double plus(double a, double b)
{
        return (a+b);
}

double minus(double a, double b)
{
        return (a-b);
}

double product(double a, double b)
{
        return (a*b);
}

double divide(double a, double b)
{
        return (a/b);
}

double (*p)(double, double);

double main()
{
        double a,b;
        char sig;
        printf("请输入两个数:");
        scanf("%lf%c%lf",&a,sig,&b);
        switch(sig)
        {
                case'+':p=plus;
                case'-':p=minus;
                case'*':p=product;
                case'/':p=divide;
        }
        if(sig=='/'&&b==0)
        {
          printf("Error,除数不能为0");
        }
        else
        {
          printf("结果=%lf",p(a,b));        
        }
        return 0;
}

人造人 发表于 2021-5-13 19:22:02

你为什么说这个代码有问题?

人造人 发表于 2021-5-13 19:23:15

double main,可以的

weijun_zhang 发表于 2021-5-13 21:50:53

人造人 发表于 2021-5-13 19:23
double main,可以的

就算我改成int main(),运行还是不对。
我输入5+3,没有任何输出结果

weijun_zhang 发表于 2021-5-13 21:51:41

人造人 发表于 2021-5-13 19:23
double main,可以的

没有运行结果。。。{:5_104:}

人造人 发表于 2021-5-13 21:52:24

weijun_zhang 发表于 2021-5-13 21:50
就算我改成int main(),运行还是不对。
我输入5+3,没有任何输出结果

scanf("%lf%c%lf",&a,sig,&b);

孤世星辰 发表于 2021-5-14 11:30:42

不会,插眼

万千只cnm 发表于 2021-5-16 01:10:48

你调用了函数吗也没用函数指针数组呀
#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<windows.h>

int add(int a, int b)

{
return a + b;

}

int sub(int a, int b)

{
return a - b;

}

int mul(int a, int b)

{
return a * b;

}

int divi(int a, int b)

{
return a / b;

}

void menu()

{
printf("---------------------------------\n");

printf("------1.add         2.sub------\n ");

printf("------3.mul         4.div------\n ");

printf("---------------------------------\n");

printf("请选择:");

}

int main()

{
int x = 0;

int y = 0;

int input = 1;

int ret = 0;

char a = { '0', '+', '-', '*', '/' };

int(*p)(int x, int y) = { 0, add, sub, mul, divi };  //定义一个函数指针数组存放函数地址

while (input)

{
menu();

scanf("%d", &input);

if (input == 0)break;

if (input > 0 && input < 5)

{
printf("请输入操作数:");

scanf("%d %d", &x, &y);

ret = (*p)(x, y);

 

}

else{
printf("输入错误!\n");

}

printf("%d %c %d = %d\n", x, a, y, ret);

}

system("pause");

return 0;

}

1055741510 发表于 2021-5-21 20:23:02

scanf("%lf%c%lf",&a,sig,&b);//sig前面取地址
页: [1]
查看完整版本: S1E30课后作业第2题——函数指针