Problem with "Double" on my calculator I made in "C" language

Asked

Viewed 895 times

1

I was making a simple "C" calculator just to exercise logic, which I learned and for fun, but I had problems , since I would like to turn it into a scientific calculator, Float can use, so I tried using the Double, that gave a bizarre error, to give a random value very large when I do (10+10) for example. Code below 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;
}   

1 answer

4

A few points to help you

  1. always use double for variables or floating point functions
  2. is customary for prototypes of functions outside the function main()
  3. The converter for input of type values double is "%lf". By changing the variables to double, also changes the scanf()s
  4. scanf ("%s", &equacao); is VERY MUCH evil! The variable equacao is of the type char, but the converter "%s" is used for strings. Or use the converter "%c" or change the type of the variable (but watch out for white spaces)
  5. The logical operators and and or are only available after you #include <iso646.h>
  6. improves the indentation of your code
  • Thanks for the help :)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.