输出不了正确的答案,而是随机数字

#输出不了正确的答案,这是小甲鱼的一个代码,就是返回一个函数指针的函数,但为什么输出不了正确答案(如1+3=4)

img

#include<stdio.h>

int add(int, int);
int sub(int, int);
int calc(int (*fp)(int, int), int, int);//声明一个参数为函数指针的函数
int (*select(char))(int, int);// 声明一个返回值是函数指针的一个函数
int add(int num1, int num2)
{
    return num1 + num2;
}

int sub(int num1, int num2)
{
    return num1 - num2;
}

int calc(int (*fp)(int, int), int num1, int num2)
{
    return (*fp)(num1, num2);
}

int (*select(char op))(int, int)
{
    switch (op)
    {
    case '+': return add;
    case '-': return sub;
    }

}
int main()
{
    int num1, num2;
    char op;
    int (*fp)(int, int);

    printf("请输入一个式子(如1+3):");
    scanf_s("%d%c%d", &num1, &op, &num2);

    fp = select(op);
    printf("%d %c %d = %d\n", num1, op, num2, calc(fp, num1, num2));



    return 0;
}

我试了,把scanf_s换成scanf就可以了,应该数读取数据错了。
scanf_s后面要指定大小。

vs的话在源文件第一行写入

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

int add(int, int);
int sub(int, int);
int calc(int (*fp)(int, int), int, int);//声明一个参数为函数指针的函数
int (*select(char))(int, int);// 声明一个返回值是函数指针的一个函数
int add(int num1, int num2)
{
    return num1 + num2;
}

int sub(int num1, int num2)
{
    return num1 - num2;
}

int calc(int (*fp)(int, int), int num1, int num2)
{
    return (*fp)(num1, num2);
}

int (*select(char op))(int, int)
{
    switch (op)
    {
    case '+': return add;
    case '-': return sub;
    }

}
int main()
{
    int num1, num2;
    char op;
    int (*fp)(int, int);

    printf("请输入一个式子(如1+3):");
    scanf("%d%c%d", &num1, &op, &num2);

    fp = select(op);
    printf("%d %c %d = %d\n", num1, op, num2, calc(fp, num1, num2));



    return 0;
}

就可以用了

vs里面才用scanf_s,软件没提示你嘛,我记得前两个有人问了一个一样的

【相关推荐】



  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/383773
  • 你也可以参考下这篇文章:有1,2,3,4四个数字,能组成多少个互不相同且无重复的三位数?都是多少
  • 除此之外, 这篇博客: 1234组成的,不重复的数字中的 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    #include<stdio.h>
    int main()
    {
    int i,j,k,n=0;for(i=1;i<5;i++)   //只要这样的三重循环就可以直接保证不重复,而不必再使用条件来判断
    {
    for(j=1;j<5;j++)
    {
    for(k=1;k<5;k++)
    {
    if(i!=j&&i!=k&&j!=k)
    {
    printf("%d%d%d\n",i,j,k);//直接输出而不必使用计算的方式执行效率才更高n++;
    }
    }
    }
    }
    printf("%d",n);
    return 0;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^