Problem with "Double" in my calculator I did in "C"

1

I was doing a simple "C" calculator just to exercise logic, which I learned and for fun, but I had problems, since I would like to transform it and a scientific calculator, I would need more memory than the Float can use, so I tried to use Double , which gave a bizarre error, to give a very large random value when I do (10+10) for example. Code down using Float.

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
//VAR
int conti=0;    
float numero1;
float numero2;
float resultado;
char equacao;
int potencia;
int A;
float soma (float numero1,float numero2,float resultado,int primeiravez);
float subtracao (float numero1,float numero2,float resultado,int primeiravez);
float multiplicacao (float numero1,float numero2,float resultado,int primeiravez);
float divisao (float numero1,float numero2,float resultado,int primeiravez);
float porcentagem (float numero1,float numero2,float resultado,int primeiravez);
float raiz(float numero1,float resultado,int primeiravez);
//FIM VAR
//EXPLICAÇÃO
printf("Esse programa faz tudo que uma calculadora simples faz,ou seja.\n");
printf("Soma(+)\nSubtracao(-)\nDivisao(/)\nMultiplicacao(*)\nRaiz(#)\nPorcentagem(%%)\n");
printf("Comece:\n");
//INICIO CÓDIGOS
A=1;
scanf ("%f", &numero2);
scanf ("%s", &equacao);
//INICIO EQUAÇÃO
do{
if(equacao=='+' or equacao=='-' or equacao=='*' or equacao=='=' or equacao=='/'
or equacao=='%' or equacao=='#' ){
//SE SOMA   
if(equacao=='+'){
    numero1=numero2;
scanf("%f",&numero2);   
resultado=soma(numero1,numero2,resultado,A);
scanf("%s",&equacao);
A=0;
}
//SE SUBTRAÇÃO
if(equacao=='-'){
    numero1=numero2;
scanf("%f",&numero2);   
resultado=subtracao(numero1,numero2,resultado,A);
scanf("%s",&equacao);
A=0;    
}
//SE MULTIPLICAÇÃO
if(equacao=='*'){
numero1=numero2;
scanf("%f",&numero2);   
resultado=multiplicacao(numero1,numero2,resultado,A);
scanf("%s",&equacao);
A=0;        
}
//SE DIVISÃO
if(equacao=='/'){
numero1=numero2;
scanf("%f",&numero2);   
resultado=divisao(numero1,numero2,resultado,A);
scanf("%s",&equacao);
A=0;        
}
//SE PORCENTAGEM
if(equacao=='%'){
    numero1=numero2;
scanf("%f",&numero2);
    resultado = porcentagem (numero1,numero2,resultado,A);
    scanf("%s",&equacao);
    A=0;
}
//SE RAIZ
if(equacao=='#'){
    numero1=numero2;
    resultado = raiz (numero1,resultado,A);
    scanf("%s",&equacao);
    A=0;
}
//MOSTRANDO RESULTADO
if(equacao=='='){
    printf("%f \n",resultado);
    conti=1;
}
}
else{
    printf("VALOR INVALIDO \n");
    conti=1;
}
}while(conti==0);
system("PAUSE");
return 0;   

}

//FUNÇÕES
float soma (float numero1,float numero2,float resultado,int primeiravez){
    if(primeiravez==1){
    resultado=numero1+numero2;
    }else{
resultado=numero2+resultado;    
}
return resultado;
}
float subtracao (float numero1,float numero2,float resultado,int primeiravez){
    if(primeiravez==1){
    resultado=numero1-numero2;
}else{
resultado=resultado-numero2;    
}
return resultado;
}
float multiplicacao (float numero1,float numero2,float resultado,int primeiravez){
    if(primeiravez==1){
    resultado=numero1*numero2;
}else{
resultado=resultado*numero2;
}
return resultado;
}
float divisao (float numero1,float numero2,float resultado,int primeiravez){
if(primeiravez==1){
resultado=numero1/numero2;
}else{
resultado=resultado/numero2;
}
return resultado;
}
float porcentagem (float numero1,float numero2,float resultado,int primeiravez){
    if(primeiravez==1){
resultado=numero1*(numero2/100);
}else{
resultado=resultado/(numero2/100);
}
return resultado;
}
float raiz(float numero1,float resultado,int primeiravez){
if(primeiravez==1){
resultado= sqrt(numero1);
}else{
resultado= sqrt(resultado);
}
return resultado;
}   
    
asked by anonymous 02.05.2014 / 08:55

1 answer

4

Some points to help you

  • Always use double for floating-point variables or functions
  • It is customary for the prototypes of functions outside the function main()
  • The input converter of values of type double is "%lf" . When you change the variables to double , it also changes the scanf() s
  • scanf ("%s", &equacao); is VERY bad ! The variable equacao is type char , but the "%s" converter is used for strings. Either you use the "%c" converter or the variable type (but attention to the whitespace)
  • Logical operators and and or are only available after doing #include <iso646.h>
  • Improve the indentation of your code
  • 02.05.2014 / 10:40