|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
修改后的代码应该能够正确运行,允许你输入数学运算式并得到结果。希望对你有所帮助!
|
|