想用参数型函数指针自己控制运行加法或者减法,但是有一个地方实现不了。
我写的代码如下#include <iostream>
#include <cstdlib>
using namespace std;
int add(int, int);
int sub(int, int);
int Math(int a, int b, int(*pAdd)(int, int));
void main()
{
int a = 3;
int b = 2;
char str;
printf("加法(add)或者 减法(sub)");
scanf_s("%s", str);
cout << Math(a, b, *str) << endl;
//cout << Math(a, b, sub) << endl;
system("pause");
}
int add(int a, int b)
{
return a+b;
}
int sub(int a, int b)
{
return a-b;
}
int Math(int a, int b, int(*pAdd)(int, int))
{
return (*pAdd)(a, b);
}
cout << Math(a, b, *str) << endl; 这一行报错了
该怎么通过自己输入add or sub来控制执行的运算呢???{:5_92:} 这样传递肯定不对,你需要的是一个函数指针,而不是一个数组名
你可以参考小甲鱼老师的讲解:
http://bbs.fishc.com/thread-77586-1-1.html 本帖最后由 yuanyangxin 于 2017-12-4 11:21 编辑
BngThea 发表于 2017-12-4 10:38
这样传递肯定不对,你需要的是一个函数指针,而不是一个数组名
你可以参考小甲鱼老师的讲解:
http://bbs ...
#include <iostream>
#include <cstdlib>
using namespace std;
int add(int, int);
int sub(int, int);
int Math(int a, int b, int(*pAdd)(int, int));
int(*select(char op))(int, int);
void main()
{
//int a = 3;
//int b = 2;
//char op='+';
//int(*fp)(int, int);
//printf("加法(add)或者 减法(sub)");
//scanf_s("%c", op);
//fp = select(op);
//cout << Math(a, b,fp) << endl;
////cout << Math(a, b, sub) << endl;
int num1, num2;
char op;
int(*fp)(int, int);
printf("请输入一个式子(如1+2):");
scanf_s("%d%c%d", &num1, &op, &num2);
fp = select(op);
cout << Math(num1, num2, fp);
system("pause");
}
int add(int a, int b)
{
return a+b;
}
int sub(int a, int b)
{
return a-b;
}
int Math(int a, int b, int(*pAdd)(int, int))
{
return (*pAdd)(a, b);
}
int(*select(char op))(int, int)
{
switch (op)
{
case '+':return add;
case '-':return sub;
}
}
你好,我按照小甲鱼老师的代码进行了上面的更改,但是依旧会报错
写入位置时发生访问冲突。上传不了报错信息的图片,麻烦你帮我看一下。 yuanyangxin 发表于 2017-12-4 11:16
你好,我按照小甲鱼老师的代码进行了上面的更改,但是依旧会报错
写入位置时发生访问冲突。 具体报 ...
报错信息在哪? BngThea 发表于 2017-12-4 11:20
报错信息在哪?
马上,我手打给你 BngThea 发表于 2017-12-4 11:20
报错信息在哪?
scan_f:格式化字符串“%c”需要类型“unsigned int”的参数,但可变参数3拥有了类型int
scan_f:没有为格式字符串传递足够的参数
select:不是所有的控件路径都返回值 本帖最后由 yuanyangxin 于 2017-12-4 11:30 编辑
#include <iostream>
#include <cstdlib>
#include<stdio.h>
using namespace std;
int add(int, int);
int sub(int, int);
int Math(int a, int b, int(*pAdd)(int, int));
int(*select(char op))(int, int);
void main()
{
int num1, num2;
char op;
int(*fp)(int, int);
printf("请输入一个式子(如1+2):");
scanf_s("%d%c%d", &num1, &op, &num2);
fp = select(op);
cout << Math(num1, num2, fp);
system("pause");
}
int add(int a, int b)
{
return a+b;
}
int sub(int a, int b)
{
return a-b;
}
int Math(int a, int b, int(*pAdd)(int, int))
{
return (*pAdd)(a, b);
}
int(*select(char op))(int, int)
{
switch (op)
{
case '+':return add;
case '-':return sub;
}
}
报错是在我输入了1+2后弹出来这个窗口的 yuanyangxin 发表于 2017-12-4 11:27
报错是在我输入了1+2后弹出来这个窗口的
1+2中间要用空格隔开
1 + 2 BngThea 发表于 2017-12-4 12:45
1+2中间要用空格隔开
1 + 2
对不起啊,还是报错了。麻烦您帮我看一下 两种解决方法:
1.用scanf关闭安全检查,可以。
2.scanf_s("%d%c%d", &num1,&op,1,&num2);字符型用scanf_s的话需要输入长度控制, {:10_257:} << >> 这些是什么符号??还有这种的? 1809228982 发表于 2018-12-21 14:06
> 这些是什么符号??还有这种的?
原本这两个符号是左移右移运算符,但在C++中这两个运算符被重载了有了新的作用,具体学到了C++再自己学习。
页:
[1]