【问题标题】:C - How to create calculator by directly inputting a string of numbers and characters(signs)?C - 如何通过直接输入一串数字和字符(符号)来创建计算器?
【发布时间】:2016-12-04 17:27:58
【问题描述】:

输入 1+2-3+4 输出 = 4

输入 1+2+3+4 输出 = 10

输入 -1-2-3-4 输出 = -10

这是我的尝试,但我给出了错误的结果

代码片段:

for(i=0;i<strlen(res)+1;i++){
    if(res[i]=='-'||res[i]=='+'||res[i]=='\0'){
        num[z]='\0';
        dig=atoi(num);
        if(x==0){
            sum=dig;
            x++;
        }
        else{
            if(res[i]=='+')
                sum=sum+dig;
            else if(res[i]=='-')
                sum=sum-dig;
        }
        z=0;

    }
    else{
        num[z]=res[i];
        z++;
}
return sum;

【问题讨论】:

标签: c string calculator


【解决方案1】:

我会在代码中添加打印语句,看看哪里出了问题。但是,当您到达终止空值 (res[i]=='\0') 时,看起来您并没有将最终数字添加到 sum

我正在对 num、x 和 z 的声明和初始化器做出假设,并且缺少的 } 是缩进所暗示的。

【讨论】:

    【解决方案2】:

    这一行引用了数组“num”,但不是正确的索引:

        dig=atoi(num);
    

    如果您将其更改为:

        dig=atoi(num[z-1]);
    

    但是,您的解决方案不适用于长度超过一位的数字的计算。

    【讨论】:

      【解决方案3】:

      但是,当您到达终止空值 (res[i]=='\0') 时,您似乎没有将最终数字添加到 sum

      没错,但不是唯一的错误;如果遇到+-,则使用前一个数字而不是下一个数字完成相应的加法或减法。所以输入1+2-3+4 实际上计算1-2+3,得到2
      您可以使用strtol 更简单地编写整个循环:

          char *beg, *end = res;
          for (sum = 0; dig = strtol(beg = end, &end, 0), end-beg; ) sum += dig;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-31
        • 1970-01-01
        • 2017-03-30
        • 2020-01-23
        • 2019-05-25
        相关资源
        最近更新 更多