C语言初学小白:关于函数指针的返回值无法出现

我想设置一个可以实现加减乘除的计算器

写了一个Calc()函数,括号里面填如Add、Sub等函数(Add等也是自己创建的函数),然后输入两个数字,进行相应的功能

问题在于Calc函数这样写的话可以显示出结果:

void Calc(int(*pf)(int,int))

{

int x=0;

int y=0;

printf("请输入两个操作数\n");

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

printf("%d\n",pf(x,y));

}

然而这样写却不能出现计算结果:

int Calc(int(*pf)(int,int))

{

int x=0;

int y=0;

printf("请输入两个操作数\n");

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

return pf(x,y);

}

这个两段代码的不同之处我在第二段代码中用加粗和下划线标注出来了

还有主函数和其他调用函数(Add、Sub)我省略没写,只写了最核心的问题,就是pf(x,y)为什么不能直接作为一个值来返回。

感谢大佬的指点,如果我的问题有描述不清楚的地方,希望您能评论出来。

应该可以吧,我vs2019没问题

后者是可以的,不过你粘贴的代码小括号和逗号用的是全角的,你要检查下源代码是否也存在这个问题。测试如下:

#include <stdio.h>

int calc(int (*pf)(int, int)) {
  int x = 0;
  int y = 0;
  printf("请输入两个操作数\n");
  scanf("%d%d", &x, &y);
  return pf(x, y);
}

int add(int a, int b) { return a + b; }

int sub(int a, int b) { return a - b; }

int main() {
  printf("add result: %d", calc(add));
  printf("sub result: %d", calc(sub));
  return 0;
}

 

Mac系统命令行下g++和clang都可以编译:

 clang test.cpp 或者 g++ test.cpp

 

测试:

./a.out

 

结果:

输入两个操作数
3
2
add result: 5请输入两个操作数
3
2
sub result: 1⏎