#include
#include
#include
#define M 1000
int main()
{
char s[M],h;
int i,k,a=0,b=0,c;
gets(s);
for(i=0;i<M;i++)
{
if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')
{
h=s[i];
k=i;
break;
}
}
for(i=0;i<k;i++)
{
a+=s[i]*(pow(10,(double(k-i-1))));
}
for(i=k+1;i<strlen(s);i++)
{
b+=s[i]*(pow(10,double(strlen(s)-k-i-1)));
if(s[i]=='\0')break;
}
switch(h)
{
case '+':
c=a+b;
break;
case '-':
c=a-b;
break;
case '*':
c=a*b;
break;
case '/':
c=a/b;
break;
}
printf("%d\n",c);
return 0;
}
以上是我设计程序的源代码,是为了实现输入一串简单的二项表达式得出结果,然后我现在的问题就是运行的时候得不到预期结果,请大神们帮忙找一下错误所在,然后就是如果再继续优化,该从哪方面更改。
这个问题已经困扰我很久了,如果有大神愿意解惑,小弟不胜感激
这个问题很简单,是一个char类型和int类型转换的问题。
for(i=0;i<k;i++)
{
a+=s[i]*(pow(10,(double(k-i-1))));
}
这个句子里面的s[i]是char类型,a是int类型,pow方法返回值应该是int,也可能是double,忘记了,不过无关紧要。
程序在做相乘的时候会把不同类型转化成同一个类型,你一个char,一个int(或double),char类型会变成int(或double)类型,转换方式为其ASCII码值,因此你一个'0'(注意这是一个字符)会转换成48,所以你最后的结果都不对,简单的做法写成s[i]-48即可
你应该把每个变量的分开赋值,int i=0;int k =0;我记得C语言里,如果跟你那样写,i和k是没有被初始化的,里面是垃圾值,好久没写C了,也不知道说的对不对,以前是这样我记得
你的k没有初始化好像
都是在后面进行了初始化的。。