|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为什么我这代码可以正常打开,但是我输入5+1或者其他算式时,就立即报错?#include <stdio.h>
int add(int, int);
int sub(int, int);
int calc(int (*p)(int, int), int, int);
int (*chose(char op))(int, int);
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
int calc(int(*p)(int, int), int a, int b) {
return (*p)(a, b);
}
int (*chose(char op))(int, int) {
switch (op)
{
case '+':return add;
case '-':return sub;
default:
break;
}
}
int main() {
int a, b;
char c;
int (*fuhao)(int, int);
printf("请输入数学运算式:");
scanf_s("%d%c%d", &a, &c, &b);
fuhao = chose(c);
printf("%d %c %d = %d", a, c, b, calc(fuhao, a, b));
return 0;
}
你的代码出现错误的原因是在使用 scanf_s函数时没有正确的传递参数。 scanf_s函数用于读取用户输入,并且需要指定每个输入变量的最大接受字符数。
在你的代码中,第14行 scanf_s函数的参数 &c应该改成 sizeof(c),以指定 c变量允许接受的最大字符数为1。另外,第10行的函数声明中,可以省略参数名。修改后的代码如下所示: #include <stdio.h>int add(int, int);int sub(int, int);int calc(int (*)(int, int), int, int);int (*chose(char op))(int, int);int add(int a, int b){ return a + b;}int sub(int a, int b){ return a - b;}int calc(int (*p)(int, int), int a, int b){ return (*p)(a, b);}int (*chose(char op))(int, int){ switch (op) { case '+': return add; case '-': return sub; default: break; }}int main(){ int a, b; char c; int (*fuhao)(int, int); printf("请输入数学运算式:"); scanf_s("%d%c%d", &a, &c,sizeof(c)); fuhao = chose(c); printf("%d %c %d = %d", a, c, b, calc(fuhao, a, b)); return 0;}
修改后的代码应该能够正确运行,允许你输入数学运算式并得到结果。希望对你有所帮助!
|
|