【发布时间】: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", &new_number);更改为scanf("%c%lf", &symbol, &new_number);。 -
对不起,我对 C 完全陌生。我可能应该提到这一点。调试与使用编译器一样吗?如果是这样,那么是的,我当然有。我不会只是来这里让你们做所有的工作......一切都很好。 (如果这是你的要求)
-
我认为你的问题的根源是使用多个scanf来解析一行。我认为当它循环回第一个 scantf("%c",...) 时,它正在读取换行符。
-
调试器与编译器不同。编译器将一种语言翻译成另一种语言,例如将 C 语言翻译成机器代码。调试器使您能够在程序运行时检查程序以确定出错的地方。 了解如何立即使用调试器。此外,这可能会有所帮助:ericlippert.com/2014/03/05/how-to-debug-small-programs
标签: c while-loop switch-statement calculator