计算器在C中相乘后崩溃

时间:2014-04-02 23:10:00

标签: c while-loop switch-statement calculator

您好,感谢您花时间阅读本文!

我试图创建一个基本的计算器,但我遇到了一些麻烦.. 计算器应该是连续的,只能使用(+, - ,*,/)操作。

  Ex: Calc is on
  result = 0
  +2  (user input)
  result = 2
  *5 (user input)
  result = 10
  % 3 (user input)
  unknown operator. Try again.
  R (user input)
  Final result = 
  Do you want to continue (Y/N)

现在我能够连续加或减(即使我认为它错了,因为即使我不输入 - 或+最后的结果将添加最新输入的数字)。 当我尝试多重或分裂时,最大的问题就来了。程序崩溃,只是不断添加。

我猜这是因为我在第一个scanf中输入了+,然后while循环只适用于那个+。我尝试了很多不同的变化,但似乎无法弄清楚!!

任何帮助或提示将不胜感激!

#include <stdio.h>
int main ()
{
    double result = 0;
    double new_number;
    char symbol;

printf("\t\t*\t+ for [addition]\t*\n");
printf("\t\t*\t- for [subtraction]\t*\n");
printf("\t\t*\t/ for [division]\t*\n");
printf("\t\t*\t* for [multiplication]\t*\n");
printf("\t\tPress 'R' to RESET/EXIT the program");
printf("\n\n\tCalculator is ON\n");
printf("\t-------------\n\n") ;
printf("current value = %.2f\n",result);

scanf("%c", &symbol);   
while (symbol != 'R')
{
    scanf("%lf", &new_number);

    if( symbol=='+')
    {
    result+=new_number;
    printf("The new result is %.2f ", result);
    }
    else if(symbol=='-')
    {
    result-=new_number; 
    printf("The new result is %.2f ", result);
    }
    else if(symbol=='*')
    {
    result*=new_number;
    printf("The new result is %.2f ", result);
    }
    else if(symbol=='/')
    {
    result/=new_number;
    printf("The new result is %.2f ", result);
    }
    else if(symbol== 'R' || symbol== 'r')
    {
    printf("Final Result = %f\n ", result);
    printf("Do you want to continue? (y/n)");
    }
    else {
    printf("Not an operation of the function.\nTry again.");
    }
}
    return 0;
}

1 个答案:

答案 0 :(得分:0)

  

BluePIXY - 您的代码刚刚运作!!非常感谢你! (现在如果有人   请解释为什么它的工作会很棒!)这是不是意味着   进入运营商是真的吗?为什么我们必须使用&amp;&amp;   而不是|| ???

它适用于BluePIXY的更改,因为现在scanf(" %c", &symbol)while循环控制表达式的一部分,因此在每次执行循环体之前执行,而在原始版本中它只执行一次在进入循环之前。

您应该阅读*scanf手册中的内容:

  

这些函数返回成功匹配的输入项数   分配

- 因此,返回值不会与true进行比较,而是与1进行比较。当然,我们必须使用&&因为我们想要在输入字符时循环并且此字符不是'R'