一个函数指针的功能,让我认识到函数指针并不是脱裤子放屁;
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时,回车,才会被输送到屏幕上。