#输出不了正确的答案,这是小甲鱼的一个代码,就是返回一个函数指针的函数,但为什么输出不了正确答案(如1+3=4)
#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,软件没提示你嘛,我记得前两个有人问了一个一样的
【相关推荐】
#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;
}