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

一个简单的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即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器