c语言函数指针

一个函数指针的功能,让我认识到函数指针并不是脱裤子放屁;


 void meun(){
     printf("**********************************\n");
     printf("********1.add   2.min ************\n");
     printf("********3.mul  4.dev *************\n");
     printf("**********  0.exit  **************\n");
     printf("**********************************\n");
}
//实现乘除的函数
int add(int x,int y){
    return x+y;
}
int min(int x,int y){
    return x-y;
}
int mul(int x,int y){
    return x*y;
}
int dev(int x,int y){
    return x/y;
}

//设计一个接受函数指针的函数
void calculate( int (*p)(int,int)){
    int x;
    int y;
    int sum;
    printf("\n请输入两个操作数->");
    scanf("%d %d",&x,&y);
    sum=p(x,y);
    printf("\n结果为->%d\n",sum);
}

void main(){
//        printf("我是进来了");
    //禁用输出缓冲区
    setbuf(stdout, NULL);
    int index=0;
    do{
            meun();
        printf("请选择操作->");
        scanf("%d",&index);
        switch (index) {
            case 1:
                calculate(add);
                break;
            case 2:
                calculate(min);
                break;
            case 3:
                calculate(mul);
                break;
            case 4:
                calculate(dev);
                break;
            case 0:
                printf("退出计算机");
                break;
            default:
                printf("输入错误");
                break;
        }
    }while(index);
}

在主函数里有一个禁用输出缓冲区,可能是printf和scanf打架了,控制台没有输出,加上这一句就正常运行,这里的原理是:printf不会立即输入到屏幕上面,而是在缓存区,只有执行scanf时,回车,才会被输送到屏幕上。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值