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 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?