用c语言构建计算器可以使用先前的结果



我有这个计算器的问题,我需要使用以前的操作(如果我想)的结果,但当我这样做,它给出正确的如果只给它相同的以前的操作

下面是代码:
#include<stdio.h>
#include<math.h>

double addition (double a, double b)
{ 
double add;
add=a+b;
return add;

}
double soustraction (double a, double b)
{
double sous;
sous=a-b;
return sous;
}
double multiplication (double a,double b)
{
double multi;
multi=a*b;
return multi;
}
double division (double a, double b)
{
double div;
div=a/b;
return div;
}
double reste_de_division (int a,int b)
{
double rest;
rest=a%b;
return rest;    
}
double puissance( double a,double b)
{
int i;
double r;

i = 0;
r = 1;

while (i < b){
r = r * a;
i ++;
}

return r;
}
double factorielle (double a)
{
int i;
double facto;
facto=1;
for(i=0;i<a;i++)
{facto=(a-i)*facto;
}
return facto;
}
double PGCD (int a,int b)
{
int i;
double pgcd;
for(i=1; i <= a && i <= b; ++i)
{
if(a%i==0 && b%i==0)
pgcd = i;
}
return pgcd;
}
double PPCM (int a,int b)
{
int ppcm;
ppcm = (a > b) ? a : b;
while(ppcm%a !=0 || ppcm%b !=0)
ppcm=ppcm+1;
return ppcm;
}
double inverse (double a)
{
double inv;
inv=1/a;
return inv;
}
int main(){

double a,b,r;
char ch;
printf("n***************************************n");
printf (" n + Addition  t t - Subtraction n * Multiplication t / Division n  Reste de division t  c Puissance n ! Factorielle t t g PGCD n p PPCM t t i Inverse n q Quitter n");
printf("n***************************************n");
printf("Donner les deux nombres et l'operation:n");
do
{b=r;   
scanf("%lf %lf %c",&a,&b,&ch);
switch (ch)
{case '+':
r=addition(a,b);
printf("%lfn",r);
break;
case '-':
r=soustraction(a,b);
printf("%lfn",r);
break;
case '*':
r=multiplication(a,b);
printf("%lfn",r);
break;
case '/':
r=division(a,b);
printf("%lfn",r);
break;
case '%':
printf("%lfn",reste_de_division(a,b));
break;
case 'c':
printf("%lfn",puissance(a,b));
break;
case '!':
printf("%lfn",factorielle(a));
break;
case 'g':
printf("%lfn",PGCD(a,b));
break;
case 'p':
printf("%lfn",PPCM(a,b));
break;
case 'i':
printf("%lfn",inverse(a));
break;
}
}while(ch !='q');
return 0;
}

对不起,我的英语不好

的例子:5 6 +

116 +173 -20//错误,应该是14而不是20

你的问题在这里:

scanf("%lf %lf %c",&a,&b,&ch);

期望用户总是输入两个双精度数和一个字符。如果用户只给出一个双精度和一个字符,则ch(和b)的值不变,程序将执行与上次相同的操作。

的例子:

第一输入:

5 6 +

这将使a等于6,b等于5,ch等于+。因此,程序将两个数字5和6相加,并产生存储在b中的结果11。

下输入:

1 -

这将使a等于1,但保持bch不变,即b仍然等于11,ch仍然等于+。因此,程序将两个数字1和11相加,并产生存储在b中的结果12。

这只是执行scanf("%lf %lf %c",&a,&b,&ch);时可能出错的一个例子,还有其他输入序列会导致(甚至更多)奇怪的输出。

需要对用户输入进行更严格的解析。scanf函数不是很好。考虑使用fgets读取整行,然后解析它。小心可以使用sscanf

最新更新