C语言编程问题,求两数之和、差、积;调用,指针(帮忙看看我的程序哪错了)

#include<stdio.h>
#include<string.h>
int add(int *m,int *n)
{
int i;
i=(*m)+(*n);
return i;
}
int sub(int *e,int *f)
{
int i;
i=(*e)-(*f);
return i;
}
int mul(int *p,int *q)
{
int i;
i=(*p)*(*q);
return i;
}
int process(int *a,int *b)
{
char i;
int j;
printf("请输入您想要的计算(+/-/*):");
scanf("%c",&i);
if(strcmp(i,'+')==0)
j=add(a,b);
return j;
if(strcmp(i,'-')==0)
j=sub(a,b);
return j;
if(strcmp(i,'*')==0)
j=mul(a,b);
return j;
}
void main()
{
int a,b,*p1,*p2,m;
p1=&a;
p2=&b;
printf("请输入两个数:\n");
scanf("%d,%d",&a,&b);
m=process(*p1,*p2);
printf("所求的值为:%d",m);
}
我把主函数改成这样(还是不行):
void main()
{
int a,b,*p1,*p2,m;
p1=&a;
p2=&b;
printf("请输入两个数:\n");
scanf("%d,%d",&a,&b);
m=process(p1,p2);
printf("所求的值为:%d",m);
}

int process(int *a,int *b)
{
char i;
int j;
printf("请输入您想要的计算(+/-/*):");
getchar(); //要把之前输入两个数时按的回车给过滤掉
scanf("%c",&i);
if(i=='+') //字符比较用不着strcmp
{
j=add(a,b);
return j;
}
if(i=='-')
{
j=sub(a,b);
return j;
}
if(i=='*')
{
j=mul(a,b);
return j;
}
}
void main()
{
int a,b,*p1,*p2,m;
p1=&a;
p2=&b;
printf("请输入两个数:\n");
scanf("%d,%d",&a,&b);
m=process(p1,p2); //不是*p1,*p2
printf("所求的值为:%d",m);
}追问

加法是对的,但是减法和乘法运行出来是错的。

追答

怎么错的

追问

乘法运行的结果:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-09
if(strcmp(i,'+')==0)
j=add(a,b);
这个比较有必要用吗:if(i=='+') 不就好了
这个不需要指针,就能干的好好的
int add(int a,int b)
{
return a+b;
}
int sub(int a,int b)
{
return a-b;
}
int mul(int a,int b)
{
return a*b;
}追问

改过之后运行加法是对的,但运行减法是错的。
输入1和4
运行减法
输出的是很小的一个负数,有好几位

追答

要是加法对了,那就是方式和思路对了,但是减法错了,可能是你编译器对int类型的解释有问题,也就是int的取值范围不可能是负数

第2个回答  2011-12-09
#include<stdio.h>
#include<string.h>
int add(int *m,int *n)
{
int i;
i=(*m)+(*n);
return i;
}
int sub(int *e,int *f)
{
int i;
i=(*e)-(*f);
return i;
}
int mul(int *p,int *q)
{
int i;
i=(*p)*(*q);
return i;
}
int process(int *a,int *b)
{
char i;
int j;
getchar(); /////
printf("请输入您想要的计算(+/-/*):");
scanf("%c",&i);
if(i-'+'==0) //不用strcmp
{j=add(a,b); //加{}
return j;}
if(i-'-'==0)
{ j=sub(a,b);
return j;}
if(i-'*'==0)
{ j=mul(a,b);
return j;}
}
void main()
{
int a,b,*p1,*p2,m;
p1=&a;
p2=&b;
printf("请输入两个数:\n");
scanf("%d%d",&a,&b);
m=process(p1,p2); //改为指针
printf("所求的值为:%d",m);
}
第3个回答  2011-12-09
在主函数中声明下你自己定义的函数试试。
第4个回答  2020-03-05
int
process(int
*a,int
*b)
{
char
i;
int
j,m,n;
m=*a;
n=*b;
printf("请输入您想要的计算(+/-/*):");
getchar();
scanf("%c",&i);
if(i=='+')
{
j=add(m,n);
return
j;
}
if(i=='-')
{
j=sub(m,n);
return
j;
}
if(i=='*')
{
j=mul(m,n);
return
j;
}
}
这个函数的问题。if语句下面不加{}的话,只有if下的第一条语句有用。
所以输入+的话是对的,输入-*的话都是走的第一个return
j;所以出错
相似回答