peng1874
2017-07-26 09:41
采纳率: 50%
浏览 1.0k
已采纳

一个简单的c语言编程求大神找一下错在哪儿

#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;

}

以上是我设计程序的源代码,是为了实现输入一串简单的二项表达式得出结果,然后我现在的问题就是运行的时候得不到预期结果,请大神们帮忙找一下错误所在,然后就是如果再继续优化,该从哪方面更改。
这个问题已经困扰我很久了,如果有大神愿意解惑,小弟不胜感激

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • a451842881 2017-07-26 10:57
    已采纳

    这个问题很简单,是一个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即可

    打赏 评论
  • 卖太妃糖的古尔丹 2017-07-26 09:57

    你应该把每个变量的分开赋值,int i=0;int k =0;我记得C语言里,如果跟你那样写,i和k是没有被初始化的,里面是垃圾值,好久没写C了,也不知道说的对不对,以前是这样我记得

    打赏 评论
  • 卖太妃糖的古尔丹 2017-07-26 09:58

    你的k没有初始化好像

    打赏 评论
  • peng1874 2017-07-26 10:01

    都是在后面进行了初始化的。。

    打赏 评论

相关推荐 更多相似问题