Ver Mensaje Individual
  #6 (permalink)  
Antiguo 24/06/2014, 15:08
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 9 meses
Puntos: 49
Respuesta: Quien Podría ayudarme?

Cita:
Iniciado por venombrain Ver Mensaje
Muchas gracias leosansan, ahora si realiza la función, pero se me genera una nueva duda, ahora si en el menú principal coloco una letra, (donde debería escanear "opción" en vez de "letra") vuelve realiza la acción de comparar si es una vocal o no, ¿hay alguna forma de que esto no pase?
........................ :)
Te has dado cuenta de un problema implícito en el código. Si en lugar de seleccionar el caso 4 ingresas primeramente una letra entrarás en en bucle. Todo es debido a declarar "opcion" como int, si no entras un int o se cuelga en el mejor de los casos, digo esto porque así te das cuenta de que hay un error, o bien toma un valor de la pila y sin pedírselo selecciona el último caso que habías elegido.

¿Cómo evitar esos comportamientos "extraños"?. Una forma es validando la variable "opcion" declarándola como char en lugar de int, así a lo simple claro.

Observa que en el código que te paso ya "opcion" no da problemas al entra una letra en lugar de un entero, cosa que sí ocurrirá con las variables "opcion1" y "opcion2", que deberías cambiar de forma análoga a lo que he hecho con "opcion":

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h> /// para "system"
  3. #include <conio.h>  /// para "getch"
  4.  
  5. int main(){
  6.  
  7.     int opcion1, opcion2, n, contador, b, mayor;
  8.     float var1, var2, resultado;
  9.   char letra, opcion = 'a';
  10.  
  11.     while ( opcion < '1' || opcion > '6' ){
  12.  
  13.         printf("Menu\n\n");
  14.     printf("1.- Calculadora\n");
  15.     printf("2.- Conversor de distancias\n");
  16.         printf("3.- Comparador de 3 enteros\n");
  17.         printf("4.- Reconocedor de vocales\n");
  18.         printf("5.- Suma con IVA\n");
  19.     printf("6.- Salir\n\n");
  20.     printf("Ingrese Opcion: ");
  21.         scanf("%c",&opcion);
  22.         while (getchar()!='\n');
  23.         system("cls");
  24.  
  25.         switch (opcion){
  26.  
  27.       case '1': // Opción 1 menu principal
  28.  
  29.         printf("Ingrese opcion a calcular\n\n");
  30.         printf("1.- Area de un triangulo\n");
  31.         printf("2.- Area de un circulo\n");
  32.         printf("3.- Area de un rectangulo\n");
  33.         printf("4.- U otro numero Salir\n\n");
  34.         printf("Ingrese Opcion: ");
  35.         scanf("%d", &opcion1);
  36.         while (getchar()!='\n');
  37.         system("cls");
  38.  
  39.       switch (opcion1) {
  40.  
  41.       case 1:
  42.         printf("Ingrese la base del triangulo: ");
  43.         scanf("%f",&var1);
  44.         printf("Ingrese la altura del triangulo: ");
  45.         scanf("%f",&var2);
  46.         resultado=(var1*var2)/2;
  47.         printf("El area del triangulo es de: %.2f unidades cuadradas",resultado);
  48.         getch();
  49.         system("cls");
  50.         break;
  51.  
  52.        case 2:
  53.         printf("Ingrese el radio del circulo: ");
  54.         scanf("%f",&var1);
  55.         resultado=(var1*var1)*3.14;
  56.         printf("El area del circulo es de: %.2f unidades cuadradas",resultado);
  57.         getch();
  58.         system("cls");
  59.         break;
  60.  
  61.         case 3:
  62.           printf("Ingrese el largo del rectangulo: ");
  63.           scanf("%f",&var1);
  64.           printf("Ingrese el ancho del rectangulo: ");
  65.           scanf("%f",&var2);
  66.           resultado=var1*var2;
  67.           printf("El area del rectangulo es de: %.2f unidades cuadradas",resultado);
  68.           getch();
  69.           system("cls");
  70.           break;
  71.       }
  72.  
  73.       case '2': // Opción 2 menu principal
  74.  
  75.       printf("Ingrese opcion a convertir\n\n");
  76.       printf("1.- De Kilometros a centimetros\n");
  77.       printf("2.- De Millas a Pies\n");
  78.       printf("3.- De Yardas a Pulgadas\n");
  79.       printf("4.- U otro numero Salir\n\n");
  80.       printf("Ingrese Opcion: ");
  81.       scanf("%d", &opcion2);
  82.       while (getchar()!='\n');
  83.       system("cls");
  84.  
  85.       switch (opcion2){
  86.       case 1:
  87.         printf("Ingrese los kilometros a convertir en centimetros: ");
  88.         scanf("%f",&var1);
  89.         var2=var1;
  90.         resultado= var1 * 100000;
  91.         printf("%.2f", var2);
  92.         printf(" Kilometros equivalen a: %.2f centimetros",resultado);
  93.         getch();
  94.         system("cls");
  95.         break;
  96.  
  97.       case 2:
  98.         printf("Ingrese las millas a convertir en pies: ");
  99.         scanf("%f",&var1);
  100.         var2=var1;
  101.         resultado= var1 * 5280;
  102.         printf("%.2f", var2);
  103.         printf(" Millas equivalen a: %.2f Pies",resultado);
  104.         getch();
  105.         system("cls");
  106.         break;
  107.  
  108.       case 3:
  109.         printf("Ingrese las yardas a convertir en pulgadas: ");
  110.         scanf("%f",&var1);
  111.         var2=var1;
  112.         resultado= var1 * 36;
  113.         printf("%.2f", var2);
  114.         printf(" Yardas equivalen a: %.2f Pulgadas",resultado);
  115.         getch();
  116.         system("cls");
  117.         break;
  118.       }
  119.       break;
  120.  
  121.     case '3': // Opción 3 menu principal
  122.  
  123.       b = 0;
  124.       contador = 0;
  125.       while( contador < 3 ){
  126.         printf("Ingrese numero a comparar:");
  127.         scanf("%d",&n);
  128.         system("cls");
  129.         if(b==0||n>mayor){
  130.           mayor=n;
  131.           b=1;
  132.         }
  133.         contador++;
  134.       }
  135.       printf("El mayor de los numeros ingresados es: %d",mayor);
  136.       if (mayor%2==0)
  137.         printf(" y es un numero par");
  138.       else
  139.         printf(" y es un numero impar");
  140.           getch();
  141.       system("cls");
  142.       break;
  143.  
  144.     case '4':
  145.  
  146.       printf("Ingrese una letra: ");
  147.       scanf( " %c", &letra);
  148.       if(letra=='a'||letra=='e'||letra=='i'||letra=='o'||letra=='u'||letra=='A'||letra=='E'||letra=='I'||letra=='O'||letra=='U') {
  149.         printf("\rLa letra %c es una vocal\n", letra); }
  150.       else
  151.         printf("La letra %c no es una vocal\n", letra);
  152.       getch();
  153.       system("cls");
  154.       break;
  155.  
  156.     case '6':
  157.  
  158.         return 1;
  159.     }
  160.     opcion = 'a';
  161.     }
  162.     system("pause");
  163.     return 0;
  164. }

Observa asimismo que te he incluido un par de librerías que te faltaban, cosa que debiera "cantar" el compilador como "warnings" así como un par de "breaks" que faltaban, Hay que fijarse en esos detalles y esmerarse en en indentar/tabular/sangrar o como quieras llamarlo el código correctamente. De esa forma te das cuenta más fácilmente de cosas como los break que te faltaban.

Espero no se me haya ido la olla, hacer las cosas rapidito rapidito tiene esos riesgos, el tiempo es escaso pero las ganas de ayudar a los demás grande.

¡¡¡Saluditos!!!