• Sábado 27 de Abril de 2024, 05:21

Autor Tema:  se repite algo que no debe ser...  (Leído 949 veces)

oscarmgg

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
se repite algo que no debe ser...
« en: Domingo 16 de Noviembre de 2008, 18:27 »
0
Hola amigos,mil gracias por su ayuda... bien tengo un programita que lo que hace es a traves de un menu seleccionar una de las operaciones propuestas,sin embargo cuando me visualiza el menu nuevamente dado que esta dentro de un do while me sale lo siguiente:

A.- SUMA
B.-RESTA
C.-PRODUCTO
D.-DIVISION
E.-SALIR

SELECCIONE UNA OPCION: A(o la a minuscula)
Digite el primer numero: 5
Digite el segundo numero:6
suma:la suma es:11

A.- SUMA
B.-RESTA
C.-PRODUCTO
D.-DIVISION
E.-SALIR

seleccione una opcion:
opcion incorrecta,intentelo de nuevo
presione una tecla para continuar...

no se porque me esta entrando al default??? como podria hacer para que me muestre correctamente el menu cada vez que realice una operacion o si se escoge una opcion de menu distinta a las posibles????porfa su ayuda es importante mil gracias.
aqui les dejo el programa,esta hecho en dev- c++

Código: Text
  1.  
  2. #include "stdio.h"
  3.  
  4.  float numero_suma(float numero_a, float numero_b)
  5.  {
  6.      float suma;
  7.      suma= numero_a + numero_b;        
  8.              
  9.      return suma;
  10.    };
  11.  
  12.   float numero_resta(float numero_a,float numero_b)
  13.   {
  14.     float resta;
  15.      if(numero_a > numero_b)
  16.                        
  17.      resta=numero_a - numero_b;
  18.      
  19.      return resta;
  20.    };
  21.  
  22. numero_producto(float numero_a,float numero_b)
  23. {
  24.    float producto;
  25.    producto= numero_a * numero_b;                    
  26.    return producto;
  27.    };
  28.  
  29. numero_division( float numero_a,float numero_b)
  30. {
  31.   float division;
  32.    if(numero_b!=0)
  33.    {
  34.     division= numero_a/numero_b;
  35.     }
  36.     else
  37.     {
  38.     printf("no puedes dividir por cero");
  39.     printf("n");
  40.     system("pause");
  41.     exit(2);
  42.     }
  43.    return division;
  44.  
  45.   };
  46.  
  47.  
  48. main()
  49. {                    /*del main*/
  50. char op;
  51. float a;
  52. float b;
  53. float numsuma;
  54. float numresta;
  55. float numproducto;
  56. float numdivision;
  57. do
  58. {
  59.    printf("ntA.- Suma");
  60.    printf("ntB.- Resta");
  61.    printf("ntC.- Producto");
  62.    printf("ntD.- division");
  63.    printf("ntE.- salir");
  64.    printf("n");
  65.    printf("selecciona una opcion: ");
  66.    scanf("%c", &op);
  67.    printf("n");
  68.  
  69.  
  70.  
  71.  
  72.  
  73. switch (op)
  74. {
  75.   case 'a': case'A':
  76.   {
  77.        printf("digite el primer numero");
  78.        scanf("%f",&a);
  79.        printf("n");
  80.  
  81.        printf("digite el segundo numero");
  82.        scanf("%f",&b);
  83.        printf("n");
  84.        printf("Suma: ");
  85.        numsuma =numero_suma(a,b);
  86.        printf("la suma es %.2fn",numsuma);
  87.      } break;
  88.    
  89.   case 'b': case 'B':
  90.        {
  91.        printf("digite el primer numero");
  92.        scanf("%f",&a);
  93.        printf("n");
  94.  
  95.       printf("digite el segundo numero");
  96.       scanf("%f",&b);
  97.       printf("n");
  98.       printf("Resta: ");
  99.       numresta = numero_resta(a,b);
  100.       printf("la resta es %.2fn",numresta);
  101.      }  break;
  102.      
  103.  
  104.   case 'c': case 'C':
  105.        {
  106.        printf("digite el primer numero");
  107.        scanf("%f",&a);
  108.        printf("n");
  109.  
  110.       printf("digite el segundo numero");
  111.       scanf("%f",&b);
  112.       printf("n");
  113.       printf("Producto: ");
  114.       numproducto = numero_producto(a,b);
  115.       printf("el producto es %.2fn",numproducto);
  116.       }break;
  117.      
  118.    case 'd': case 'D':
  119.        {
  120.        printf("digite el primer numero");
  121.        scanf("%f",&a);
  122.        printf("n");
  123.  
  124.        printf("digite el segundo numero");
  125.        scanf("%f",&b);
  126.        printf("n");
  127.        printf("Division: ");
  128.        numdivision = numero_division(a,b);
  129.        printf("la division es %.2fn",numdivision);
  130.        }break;
  131.      
  132.    case 'e': case 'E':
  133.       {  
  134.      printf("ha elegido salir del programa...Adios...");
  135.      printf("n");
  136.      system("pause");
  137.      exit(0);
  138.      } break;
  139.      
  140.      default:{
  141.      printf("opcion incorrecta,intentalo de nuevo");
  142.      printf("n");
  143.     }break;
  144.      
  145.    
  146.     }        /* del switch*/
  147.    
  148.    
  149.   }while((op=='A') ||(op=='a')|| (op=='B') ||(op=='b')|| (op=='C') ||(op=='c')||( op=='D') ||(op=='d')||( op=='E')||(op=='e'));
  150.  
  151.      
  152. system("pause");
  153.  
  154. }  /* del main*/
  155.  
  156.  
  157.  
  158.  

JeoV

  • Miembro activo
  • **
  • Mensajes: 49
    • Ver Perfil
Re: se repite algo que no debe ser...
« Respuesta #1 en: Domingo 16 de Noviembre de 2008, 23:01 »
0
seguro que el dev no te marca error? tus funciones que declaras al principio no tienen tipo de variable de regreso, linea 22 y 29 que supongo son float por el tipo de variables que manejas.

y bueno con respecto al problema

cambia el especificador de formato
en la parte de la linea 66 de scanf("%c", &op); a scanf("%s", &op);
no se en si a que se deba pero al parecer se ejecuta como uno lo espera.

El especificador %c es para caracter que podrias aplicarlo aqui ya que solo usas un caracter
y el %s es para cadenas(strings) que podria aplicarse para el mismo caso se supone(aun que en este caso existe una diferencia).

salu2   :good: