标题:关于c指针函数的问题
只看楼主
gunuanguang
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-9-17
结帖率:0
已结贴  问题点数:10 回复次数:9 
关于c指针函数的问题
最近在学习c语言指针部分,用到指针函数,写了如下程序,运行有错误。但我明明觉得不错哇!望高手赐教!!
#include <stdio.h>


void main()
{
    double add(double,double);    //declare add,sub,mul,div functions
    double sub(double,double);
    double mul(double,double);
    double div(double,double);
   
    double (*oper_fun[])(double,double)={add,sub,mul,div};

    while(1)
    {   
        double a,b,c;
        printf("This is a simple calculator,it has 5 functions as follows!\n");
        printf("1.add\t2.sub\t3.mul\t4.div\t");
        printf("Please enter as such format:number number operation\n");
        scanf("%f%f%d",&a,&b,&c);
        printf("Result is:%f\n",oper_fun[ c - 1](a,b));
    }


}

    double add(double x,double y)    //add function
    {return x+y;}
    double sub(double x,double y)    //sub function
    {return x-y;}
    double mul(double x,double y)    //mul function
    {return x*y;}
    double div(double x,double y)    //div function
    {return x/y;}

搜索更多相关主题的帖子: double simple include calculator div 
2012-10-01 21:57
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
得分:1 
C语言有函数 参数的传递  可没有函数名 传递的说法啊

我要成为嘿嘿的黑客,替天行道
2012-10-02 02:24
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
得分:0 
弄不明白    double (*oper_fun[])(double,double)={add,sub,mul,div}; 这个句子的意思
只知道double类型要用 printf("%lf")格式
在就是 你那个数组的 下标
printf("Result is:%f\n",oper_fun[ c - 1](a,b));
c是double型的 c-1  是小数格式的 ,数组引用方面不太合法吧

编译器不给报错误  这个了不得了

我要成为嘿嘿的黑客,替天行道
2012-10-02 02:33
lx1066198952
Rank: 2
等 级:论坛游民
帖 子:16
专家分:24
注 册:2012-9-28
得分:1 
没有看懂你的代码
2012-10-03 09:51
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
得分:1 
你没写错
错误十分简单,你定义的是double a,b
所以转换说明符要用%lf,不然a,b的值赋不进去
scanf("%lf%lf%d",&a,&b,&c);
2012-10-03 12:02
gyll
Rank: 2
等 级:论坛游民
帖 子:56
专家分:21
注 册:2009-4-22
得分:1 
还有double c 要改成int c的吧

学习C
2012-10-03 23:35
胡振杰
Rank: 2
等 级:论坛游民
帖 子:41
专家分:63
注 册:2012-9-14
得分:1 
double div(double x,double y)    //div function
    {return x/y;}
在您的最后一个实现除法的功能的代码有点不对。您应该先判断y是否为0,如果是则应返回-1,如果不是则继续计算x/y。
2012-10-04 01:09
xiying12571
Rank: 1
等 级:新手上路
帖 子:6
专家分:8
注 册:2012-5-19
得分:1 
表示基础不够,还看不明白!
2012-10-04 17:21
陆嘉文
Rank: 1
来 自:江西
等 级:新手上路
帖 子:96
专家分:6
注 册:2011-11-10
得分:1 

double (*oper_fun[c-1])(double,double)={add,sub,mul,div};这是指针数组,[]里面不能是变量 用Switch语句
后面类型是double和float是 不同 的所以输出的时候要加上l

#include <stdio.h>
void main()
 {
     double add(double,double);   
     double sub(double,double);
     double mul(double,double);
     double div(double,double);
     double (*oper_fun[])(double,double)={add,sub,mul,div};//
    while(1)
     {   
        double a,b;
        int c;
         scanf("%lf %lf %d",&a,&b,&c);
         switch(c)
         {
             case 0: printf("Result is:%f\n",oper_fun[0](a,b));break;
             case 1:printf("Result is:%f\n",oper_fun[1](a,b));break;
             case 2:printf("Result is:%f\n",oper_fun[2](a,b));break;
             case 3:printf("Result is:%f\n",oper_fun[3](a,b));break;
             default:printf("meiyou zhegeshu");
         }
     }
}
     double add(double x,double y)    {return x+y;}
     double sub(double x,double y)    {return x-y;}
     double mul(double x,double y)    {return x*y;}
     double div(double x,double y)    {return x/y;}
运行通过!


[ 本帖最后由 陆嘉文 于 2012-10-5 12:13 编辑 ]
2012-10-05 11:46
Eumenides_me
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:63
专家分:151
注 册:2012-9-26
得分:1 
三楼、五楼、六楼都已经把问题说出来了,注意事项七楼也已经说明。我再给你上一张成功运行的图,如果还有问题,请自行对比检查

修改部分已标出,判断除数是否为零的代码我就不附带上去了

[ 本帖最后由 Eumenides_me 于 2012-10-5 12:08 编辑 ]
2012-10-05 12:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-382424-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.147660 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved