【问题标题】:Calculator crashes after multiplying in C在C中乘法后计算器崩溃
【发布时间】:2014-05-14 12:38:53
【问题描述】:

您好,感谢您抽出宝贵时间阅读本文!

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

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

【问题讨论】:

  • 您是否已经使用调试器检查了程序的执行情况?如果没有,请不要指望我们为您这样做......
  • 您需要在每次循环中读取一个新符号和一个新数字 - 否则您每次都将进入相同的 if 语句。尝试将scanf("%lf", &amp;new_number); 更改为scanf("%c%lf", &amp;symbol, &amp;new_number);
  • 对不起,我对 C 完全陌生。我可能应该提到这一点。调试与使用编译器一样吗?如果是这样,那么是的,我当然有。我不会只是来这里让你们做所有的工作......一切都很好。 (如果这是你的要求)
  • 我认为你的问题的根源是使用多个scanf来解析一行。我认为当它循环回第一个 scantf("%c",...) 时,它正在读取换行符。
  • 调试器与编译器不同。编译器将一种语言翻译成另一种语言,例如将 C 语言翻译成机器代码。调试器使您能够在程序运行时检查程序以确定出错的地方。 了解如何立即使用调试器。此外,这可能会有所帮助:ericlippert.com/2014/03/05/how-to-debug-small-programs

标签: c while-loop switch-statement calculator


【解决方案1】:

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

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

您应该在*scanf 手册中阅读:

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

- 所以,返回值不是与true 比较,而是与数字1 比较。当然我们必须使用&amp;&amp;,因为我们想在输入字符时循环并且这个字符不是'R'

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2016-08-13
    • 1970-01-01
    • 2015-04-30
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多