Calculadora en C

Si eres principiante y tienes alguna consulta entra en este foro.
Responder
Mensaje
Autor
adrian_rg
Mensajes: 1
Registrado: 14/10/2019 8:22 am

Calculadora en C

#1 Mensaje por adrian_rg » 14/10/2019 9:06 am

Buenas, soy Adrian y estoy aprendiendo a programar en C.
Estoy intentando programar una calculadora básica, que pueda sumar, restar, multiplicar y dividir. El resultado de las operaciones se guardan en una variable, que se utiliza para la siguiente operación. La calculadora tambien tiene 3 comandos: t (cambia el valor del acumulador a la cifra que yo quiera), c (reestablece el valor del acumulador a 0) y s (parar la calculadora).
Para que la calculadora funcione utilizo scanf(), donde tengo que escribir la operacion o el comando. Por ejemplo: : + 6 o : * 4. Esto funciona bien, pero no se como hacer para escribir el comando c sin tener que escribir otro valor despues. Es decir, si escribo scanf( %c %f, simbolo, digito) y escribo solo c y le doy a enter, el programa espera tambien otro valor. Como puedo hacer para que al escribir c y darle al enter el acumulador se vuelva 0? (sin tener que escribir otro valor (cc))
Imagen

Avatar de Usuario
daltomi
Mensajes: 355
Registrado: 28/04/2007 7:29 pm
Ubicación: Argentina

Re: Calculadora en C

#2 Mensaje por daltomi » 15/10/2019 4:20 am

Buenas.

scanf suele dar mas problemas que soluciones :) y tienes que recurrir a "trucos" de formato para obtener resultados.

Lo que yo generalmente hago es no usar scanf y en su lugar usar fgets + sscanf.

Ejemplo:

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char *leer(void)
{
   static char str[10 + 1]; //máximo 10 caracteres + caracter NUL

   fgets(str, sizeof(str), stdin);

   // fgets siempre coloca el caracter NUL al final del array.
   
   // fgets deja el salto de linea en el array sólo si tiene lugar
   // para hacerlo.

   // Buscamos y reemplazamos el caracter de
   // salto de línea(\n) por el caracter NUL(\0)
   // para que sscanf no lo lea.
   char *char_n = strchr(str, '\n');

   if (char_n != NULL) {
      *char_n = '\0'; 
   }

   return str;
}

int main(void)
{
   char  c;
   float f;
   int n = sscanf(leer(), "%c%f", &c, &f);

   // valores de n
   // -1    =  indica que no se ingresó ningún dato por parte
   //          del usuario, sólo presionó la tecla Enter.
   // >= 1  =  indica el número de ocurrencias *validas* del
   //          formato de sscanf.

   // ejemplo según "%c%f"
   // ""       -> n = -1
   // "c"      -> n = 1    %c
   // "c2"     -> n = 2   %c y %f
   // "c2 2"   -> n = 2  %c y %f se descarta el " 2"
   // "c 2"    -> n = 2  %c y %f
   // "c 2 2"  -> n = 2  %c y %f se descarta el ultimo " 2"

   printf("n:%d,c:%c,f:%f\n",n, c,f);

   return EXIT_SUCCESS;
}
Así, en tú calculadora, si n == 1, el operador es unario, como en el caso de 'c' que indicas.

Saludos.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Majestic-12 [Bot] y 7 invitados