elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Solucionado] Problema con Calculadora
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] Problema con Calculadora  (Leído 4,049 veces)
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
[Solucionado] Problema con Calculadora
« en: 22 Diciembre 2011, 10:48 am »

Código:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int a,f;
  double s,d;
  printf("Elija una opcion: \n\n1.Sumar\n2.Restar\n3.Multiplicar\n4.Dividir\n\n");
  scanf("%d" , &a);
  switch(a) {
            case 1:
                 printf("\nIntroduzca el primer numero:\n\n");
                 scanf("%lf" , &s);
                 printf("\nIntroduzca el segundo numero:\n\n");
                 scanf("%lf" , &d);
                 printf("\nResultado: %lf\n" , s+d);
                 break;
            case 2:
                 printf("\nIntroduzca el primer numero:\n\n");
                 scanf("%lf" , &s);
                 printf("\nIntroduzca el segundo numero:\n\n");
                 scanf("%lf" , &d);
                 printf("\nResultado: %lf\n" , s-d);
                 break;
            case 3:
                 printf("\nIntroduzca el primer numero:\n\n");
                 scanf("%lf" , &s);
                 printf("\nIntroduzca el segundo numero:\n\n");
                 scanf("%lf" , &d);
                 printf("\nResultado: %lf\n" , s*d);
                 break;
            case 4:
                 printf("\nIntroduzca el primer numero:\n\n");
                 scanf("%lf" , &s);
                 printf("\nIntroduzca el segundo numero:\n\n");
                 scanf("%lf" , &d);
                 printf("\nResultado: %lf\n\n" , s/d);
                 break;
            default:
                    printf("Opcion incorrecta\n");
                    break;
                                                                                      
                 }
                
  
  system("PAUSE");
  return 0;
}
He creado esta calculadora, pero no se me ocurre como hacer para que cuando no se introduzca la opción correcta se haga algo.
Ej:
La acabo de poner a funcionar y si en vez de introducir un numero introduzco una letra hace lo que le da la gana y escribe resultados muy raros, y después también, si elijo la opción incorrecta(se ejecuta el default) pero nose como hacer para que vuelva al incio.
PD: He probado con "goto" pero funciona mal y me gustaría prescindir de él.
Gracias

Edito: He cambiado algunas cosillas del código


« Última modificación: 26 Diciembre 2011, 18:46 pm por |Demon| » En línea

Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: Problema con Calculadora
« Respuesta #1 en: 22 Diciembre 2011, 15:21 pm »

Código
  1. #include <stdio.h>
  2.  
  3. int main ()
  4. {
  5. int a, b, opt;
  6.  
  7. printf ("Calc 0.1 : Sagrini 2011 : 22-12-11\n");
  8. printf ("Escribe dos numeros enteros: "); scanf ("%d %d", &a, &b);
  9. printf ("Selecciona una opcion:\n1. Sumar\t3. Multiplicar\n2. Restar\t4. Dividir\n> "); scanf ("%d", &opt);
  10.  
  11. switch (opt)
  12. {
  13. case 1 : { a+=b; break; } case 3 : { a=a*b; break; }
  14. case 2 : { a-=b; break; } case 4 : { a=a/b; break; }
  15. default: { printf ("[!] Opcion elegida no valida\n\n"); return 1; }
  16. }
  17.  
  18. printf ("Ans = %d\n\n", a); return 0;
  19. }
  20.  

El código es muy mejorable, podrías modificarlo para que reconociese si los valores A y B son correctos, podrías cambiar scanf por otra función más segura... etc. Te paso la pelota. ¡Te toca!
Un saludo. Sagrini


En línea

isseu


Desconectado Desconectado

Mensajes: 325


°º¤ø,¸¸,El conocimiento es poder°º¤ø,¸¸,ø¤º°`°º¤ø,


Ver Perfil WWW
Re: Problema con Calculadora
« Respuesta #2 en: 22 Diciembre 2011, 15:38 pm »

¿quieres hacer una calculadora de verdad?, busca sobre Notacion Polaca o Polaca inversa (http://es.wikipedia.org/wiki/Notaci%C3%B3n_polaca_inversa)
En línea

Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: Problema con Calculadora
« Respuesta #3 en: 22 Diciembre 2011, 16:29 pm »

La notación polaca inversa no se usa mucho, por lo que un programa que funcione con la notación polaca inversa será ineficiente y poco útil.
Yo más bien sugeriría que modificase el programa para que reconociese las operaciones desde los argumentos de main ().
En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Problema con Calculadora
« Respuesta #4 en: 22 Diciembre 2011, 17:17 pm »

Eso era lo que yo quería preguntar, ¿como haces para que reconozca A y B cuando son incorrectos?

Edito: Lo he cambiado, y he hecho este:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.  int op;
  7.  double x,y,resultado;
  8.  printf("Calc 1.0 > Preython < 2011\n\n");
  9.  printf("Introduce dos numeros:\n");
  10.  scanf("%lf %lf", &x, &y);
  11.  printf("\nElije una opcion:\n1.Sumar\t\t2.Restar\n3.Multiplicar\t4.Dividir\n>"); scanf("%d", &op);
  12.  switch (op)
  13.  {
  14.         case 1 : { resultado = x+y; break; }
  15.         case 2 : { resultado = x-y; break; }  
  16.         case 3 : { resultado = x*y; break; }
  17.         case 4 : { resultado = x/y; break; }
  18.         default : { printf("[!] Opcion incorrecta [!]\n\n"); return 1; }                                              
  19.  }
  20.         printf("Resultado > %lf\n", resultado);
  21.  system("PAUSE");
  22.  return 0;
  23. }
Con este código, si cuando elijo la opción incorrecta, me escribe el texto y, automáticamente, se cierra. ¿Como podría hacerlo para que no se cerrase?

¿Lo que utilice para volver a empezar si se da la opción incorrecta también lo podré utilizar para crear un switch con opciones de salir y volver a empezar?
Algo así:
Código
  1. int a;
  2. printf("Opciones:\n1.Volver a empezar\t2.Salir\n"); scanf("%d", &a);
  3. switch (a)
  4. {
  5.       case 1 : { ir al incio; break; }
  6.       case 2 : { return 0; break; }      
  7. }
Saludos
« Última modificación: 22 Diciembre 2011, 17:56 pm por preython » En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Problema con Calculadora
« Respuesta #5 en: 23 Diciembre 2011, 00:30 am »

Cuando da la opción incorrecta se cierra porque tienes un return en el default. Con el return ya estás devolviendo un int y cerrando tu función, es decir, el main, y por ende, se cierra el programa. Debes quitar esa instrucción para que no se cierre.
Y si quieres que empiece de vuelta, puedes meter todo en un while y preguntar al usuario si quiere seguir o no, si la respuesta es si, vuelve al while (elige una condición adecuada) y si no, sales!
En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Problema con Calculadora
« Respuesta #6 en: 23 Diciembre 2011, 09:23 am »

Aqui está:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.  int op,a;
  7.  double x,y,resultado;
  8.  do{
  9.         printf("Calc 1.0 > Preython < 2011\n\n");
  10.         printf("Introduce dos numeros:\n");
  11.         scanf("%lf %lf", &x, &y);
  12.         printf("\nElije una opcion:\n1.Sumar\t\t2.Restar\n3.Multiplicar\t4.Dividir\n>"); scanf("%d", &op);
  13.         switch (op)
  14.         {
  15.                case 1 : { resultado = x+y; break; }
  16.                case 2 : { resultado = x-y; break; }  
  17.                case 3 : { resultado = x*y; break; }
  18.                case 4 : { resultado = x/y; break; }
  19.                default : { printf("[!] Opcion incorrecta [!]\n\n");}                                              
  20.         }
  21.                printf("Resultado > %lf\n\n", resultado);
  22.                printf("Opciones:\n1.>Volver a empezar\t2.>Salir\n");
  23.                scanf("%d", &a);
  24.                }while( a==1);
  25.  system("PAUSE");
  26.  return 0;
  27. }
  28.  
Pero hay varios problemas, si en los numeros introduzco una letra me va directamente a "system("PAUSE");" y se cierra. Si en las opciones introduzco el numero incorrecto me dice que lo meti mal y me deja volver a empezar, pero si meto una letra me va directamente a system(PAUSE) para cerrarse.
« Última modificación: 23 Diciembre 2011, 09:58 am por PrEyThOn » En línea

Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: Problema con Calculadora
« Respuesta #7 en: 23 Diciembre 2011, 10:40 am »

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
Citar
Por el otro lado, para evitar esas pausas fastidiosas es necesario evitar las funciones que dejan basura por doquier (como scanf();) y utilizar funciones como la ya mencionada fgets();

Scanf no es muy recomendable, su uso no es muy seguro y el resultado no siempre correcto.
Un saludo. Sagrini
En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Problema con Calculadora
« Respuesta #8 en: 23 Diciembre 2011, 11:34 am »

Me podéis poner un ejemplo fácil con "fgets()", es que no lo entiendo.
¿Vale para números?
« Última modificación: 23 Diciembre 2011, 11:44 am por PrEyThOn » En línea

Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: Problema con Calculadora
« Respuesta #9 en: 23 Diciembre 2011, 12:23 pm »

http://foro.elhacker.net/programacion_cc/fgets_para_enteros-t348368.0.html;topicseen :¬¬ :¬¬ :¬¬
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema Calculadora en Perl
Scripting
Xanz 2 3,405 Último mensaje 11 Febrero 2011, 22:30 pm
por Shell Root
Problema con calculadora basica!!!!!!!!!!
Programación C/C++
prometheus48 4 3,389 Último mensaje 9 Octubre 2011, 14:48 pm
por prometheus48
PROBLEMA calculadora
Programación C/C++
jorgerolli 0 1,577 Último mensaje 3 Diciembre 2011, 03:12 am
por jorgerolli
[Solucionado] Problema al crear Calculadora
Programación C/C++
JosebaliX 7 3,216 Último mensaje 15 Agosto 2014, 15:45 pm
por JosebaliX
problema con calculadora graficadora
Electrónica
01munrra 0 2,268 Último mensaje 18 Octubre 2016, 05:48 am
por 01munrra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines