Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Quien Podría ayudarme?

Estas en el tema de Quien Podría ayudarme? en el foro de C/C++ en Foros del Web. Buenas, quisiera saber si me pudiesen ayudar con lo siguiente, resulta que estoy realizando un código de c++ el cual tiene un Menu y dependiendo ...
  #1 (permalink)  
Antiguo 23/06/2014, 23:44
 
Fecha de Ingreso: junio-2014
Mensajes: 3
Antigüedad: 9 años, 10 meses
Puntos: 0
Pregunta Quien Podría ayudarme?

Buenas, quisiera saber si me pudiesen ayudar con lo siguiente, resulta que estoy realizando un código de c++ el cual tiene un Menu y dependiendo de la elección realiza una solución, el caso es que lo que llevo escrito lo realiza bien pero al momento de insertar el siguiente código no lo ejecuta correctamente, les dejo el código a continuación.

Código:
 char letra;
    printf("Ingrese una letra: ");
	scanf( "%d", &letra); 
      if(letra=='a'||letra=='e'||letra=='i'||letra=='o'||letra=='u'||letra=='A'||letra=='E'||letra=='I'||letra=='O'||letra=='U') {
		  printf("La letra %c es una vocal\n", letra); }
      else  {
		  printf("La letra %c no es una vocal\n", letra); }
	  getch();
	  system("cls");
Este funciona correctamente, pero en el siguiente código no realiza su función correctamente (Detectar si la letra ingresada es una vocal o no)

Código:
int opcion,opcion1,opcion2,n,contador,b,mayor;
	float var1,var2,resultado;
	

	opcion=0;

	while (opcion!=6) 

	{
		printf("Menu\n\n");
        printf("1.- Calculadora\n");
        printf("2.- Conversor de distancias\n");
		printf("3.- Comparador de 3 enteros\n");
		printf("4.- Reconocedor de vocales\n");
		printf("5.- Suma con IVA\n");
        printf("6.- Salir\n\n");
        printf("Ingrese Opcion: ");

		scanf("%d",&opcion);
		system("cls");

		switch (opcion) {
        
		case 1: // Opción 1 menu principal
        
		printf("Ingrese opcion a calcular\n\n");
        printf("1.- Area de un triangulo\n");
        printf("2.- Area de un circulo\n");
		printf("3.- Area de un rectangulo\n");
		printf("4.- U otro numero Salir\n\n");
		printf("Ingrese Opcion: ");
		scanf("%d", &opcion1);
		system("cls");
		
		switch (opcion1) {
		case 1:
           printf("Ingrese la base del triangulo: ");
           scanf("%f",&var1);
           printf("Ingrese la altura del triangulo: ");              
           scanf("%f",&var2);
           resultado=(var1*var2)/2;
           printf("El area del triangulo es de: %.2f unidades cuadradas",resultado);
		   getch();
		   system("cls");
		   break;

		 case 2:
           printf("Ingrese el radio del circulo: ");
           scanf("%f",&var1);
           resultado=(var1*var1)*3.14;
           printf("El area del circulo es de: %.2f unidades cuadradas",resultado);
		   getch();
		   system("cls");
		   break;

		  case 3:
           printf("Ingrese el largo del rectangulo: ");
           scanf("%f",&var1);
           printf("Ingrese el ancho del rectangulo: ");              
           scanf("%f",&var2);
           resultado=var1*var2;
           printf("El area del rectangulo es de: %.2f unidades cuadradas",resultado);
		   getch();
		   system("cls");
		   break;
		   }

        break;

		case 2: // Opción 2 menu principal

		printf("Ingrese opcion a convertir\n\n");
        printf("1.- De Kilometros a centimetros\n");
        printf("2.- De Millas a Pies\n");
		printf("3.- De Yardas a Pulgadas\n");
		printf("4.- U otro numero Salir\n\n");
		printf("Ingrese Opcion: ");
		scanf("%d", &opcion2);
		system("cls");
		

		switch (opcion2) 
		
		{
		case 1:
		   printf("Ingrese los kilometros a convertir en centimetros: ");
		   scanf("%f",&var1);
		   var2=var1;
           resultado= var1 * 100000;
		   printf("%.2f", var2);
           printf(" Kilometros equivalen a: %.2f centimetros",resultado);
		   getch();
		   system("cls");
		   break;
		   
		case 2:
		   printf("Ingrese las millas a convertir en pies: ");
		   scanf("%f",&var1);
		   var2=var1;
           resultado= var1 * 5280;
		   printf("%.2f", var2);
           printf(" Millas equivalen a: %.2f Pies",resultado);
		   getch();
		   system("cls");
		   break;

		case 3:
		   printf("Ingrese las yardas a convertir en pulgadas: ");
		   scanf("%f",&var1);
		   var2=var1;
           resultado= var1 * 36;
		   printf("%.2f", var2);
           printf(" Yardas equivalen a: %.2f Pulgadas",resultado);
		   getch();
		   system("cls");
		   break;



		}
		break;

	case 3: // Opción 3 menu principal
         b=0;
         contador=0;
         while(contador<3) 
         { 
         printf("Ingrese numero a comparar:"); 
         scanf("%d",&n);
         system("cls");
         if(b==0||n>mayor) 
         { 
         mayor=n;
         b=1; 
         } 
         contador=contador+1;
         } 
         printf("El mayor de los numeros ingresados es: %d",mayor);
           if (mayor%2==0)
           printf(" y es un numero par");
		   else
	       printf(" y es un numero impar"); 
           getch();
		   system("cls");
		   break;

	case 4: 

    char letra;
    printf("Ingrese una letra: ");
	scanf( "%d", &letra); 
      if(letra=='a'||letra=='e'||letra=='i'||letra=='o'||letra=='u'||letra=='A'||letra=='E'||letra=='I'||letra=='O'||letra=='U') {
		  printf("La letra %c es una vocal\n", letra); }
      else  {
		  printf("La letra %c no es una vocal\n", letra); }
	  getch();
	  system("cls");
	break;
	} 
	}

	system("pause");


	return 0;
}
Si fueran tan amables de decirme en lo que estoy fallando les estaría muy agradecido, saludos y muchas gracias de antemano.
  #2 (permalink)  
Antiguo 24/06/2014, 06:20
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
Puntos: 49
Respuesta: Quien Podría ayudarme?

Creo que el problema radica en el scanf:

Código C++:
Ver original
  1. scanf( "%d", &letra);

donde %d debe ser %c y dejar un espacio en blanco antes del mismo para limpiar el buffer:

Código C++:
Ver original
  1. scanf( " %c", &letra);

¡¡¡Saluditos!!!

  #3 (permalink)  
Antiguo 24/06/2014, 09:58
 
Fecha de Ingreso: junio-2014
Mensajes: 3
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Quien Podría ayudarme?

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? Muchas gracias de antemano, y el %d lo había cambiado probando algo, siempre debería haber sido %c, y lo otro el mensaje de si es o no una vocal debería aparecer al lado de cuando ingrese la vocal, pero aparece abajo. Esas son mis dudas muchas gracias de antemano :)

Última edición por venombrain; 24/06/2014 a las 10:18
  #4 (permalink)  
Antiguo 24/06/2014, 11:07
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Quien Podría ayudarme?

Código C++:
Ver original
  1. #include <cstdio>
  2.  
  3. int main () {
  4.  
  5.  
  6.     int opcion;
  7.     printf ( "dame una opcion" );
  8.     scanf ( "%d", &opcion );
  9.    
  10.     while ( opcion != 6 ) {
  11.    
  12.         switch (opcion) {
  13.             case 1:
  14.                 printf("\nEstoy en case 1:");
  15.                 //Hago las comparaciones
  16.                 //Y le devuelvo su valor de cero para que no se repita
  17.                 opcion = 0;       //dale un valor para mantener el control
  18.                 break;
  19.                
  20.             case 2:
  21.                 printf("\nEstoy en case 2:");
  22.                 //Hago las comparaciones
  23.                 //Y le devuelvo su valor de cero para que no se repita
  24.                 opcion = 0;       //dale un valor para mantener el control                
  25.                 break;
  26.                
  27.             case 3:
  28.                 printf("\nEstoy en case 3:");
  29.                 //Hago las comparaciones
  30.                 //Y le devuelvo su valor de cero para que no se repita
  31.                 opcion = 0;       //dale un valor para mantener el control                
  32.                 break;
  33.                
  34.             default:
  35.                 printf("\nEstoy en defalt opcion no valida:");
  36.                 break;
  37.         }//fin de switch
  38.         if (opcion == 0){          //aqui compruebo el valor de 0
  39.             printf ( "\n\ndame una opcion si elijo 6 salgo fuera de while o elijo una opcion anterior" );
  40.             scanf ( "%d", &opcion );            
  41.         }
  42.        
  43.        
  44.     }
  45.  
  46.     getchar();
  47.     return 0;
  48. }

algo como eso?
después de terminar de usar la opcion dale un valor para que puedas reutilizarla o simplemente usarla para que se rompa el bucle.
  #5 (permalink)  
Antiguo 24/06/2014, 14:00
 
Fecha de Ingreso: junio-2014
Mensajes: 3
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Quien Podría ayudarme?

Vangodp, gracias pero no es lo que necesito, el caso es que luego de usar el case 4 (la funcion de detectar vocales) si ingreso una letra en "opcion" vuelve a realizar el case 4
  #6 (permalink)  
Antiguo 24/06/2014, 15:08
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
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!!!

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

Sorry se coló esto que no iba a ir aquí.

Borrarlo si pueden.

Saludos!.

Última edición por leosansan; 24/06/2014 a las 15:30
  #8 (permalink)  
Antiguo 25/06/2014, 02:52
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Quien Podría ayudarme?

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

debes aprender como funciona el buffer:
Aquí tienes un ejemplo:

escriba justo 1abc y pulse enter para ver como encajan cada letra en su lugarcito XD
Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4.  
  5. int main () {
  6.     int opcion;
  7.     char letraA, letraB, letraC, ENTER = 0;
  8.     printf ( "Escriba: 1abc\n");
  9.     scanf ( "%d", &opcion );
  10.    
  11.     if ( opcion == 1 ) {
  12.         scanf ( "%c", &letraA );
  13.         scanf ( "%c", &letraB );
  14.         scanf ( "%c", &letraC );
  15.         scanf ( "%c", &ENTER );
  16.     }
  17.     opcion=0;
  18.     printf ( "opcion tiene: %d \nletraA tiene: %c \nletraB tiene: %c \nletraC tiene: %c  \nENTER tiene   %d", opcion, letraA, letraB, letraC, ENTER );
  19.     printf ( "\n\nPuedes comprobar que ENTER es igual a 10 que en la tabla ASC2 corresponde al caracter salto de linea que es el '\\n'\n\n");
  20.     printf ( "\nPuedes conferir en: http://www.elcodigoascii.com.ar/codigo-americano-estandar-intercambio-informacion/codigo-ascii.gif \n");
  21.     printf ( "\n\nDesea conferir? Si elijes 1 se abrira su navegador con la tabla asc2\n1-si\nOtro numero-no\n");
  22.     scanf  ( "%d%*c", &opcion);
  23.     if(opcion==1){
  24.         system("start \"Internet Explorer.exe\" \"http://www.elcodigoascii.com.ar/codigo-americano-estandar-intercambio-informacion/codigo-ascii.gif\" ");
  25.     }
  26.     else{
  27.         printf("baybay =)");
  28.     }
  29.     printf("Pulse una tecla para salir.");
  30.     system ( "pause>nul" );
  31.  
  32.     return 0;
  33. }
  #9 (permalink)  
Antiguo 25/06/2014, 04:27
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
Puntos: 49
Respuesta: Quien Podría ayudarme?

Cita:
Iniciado por vangodp Ver Mensaje
Código C++:
Ver original
  1. scanf ( "%d%*c", &opcion );   //El problema esta en esta linea. debes ignorar el enter        }
Por una vez no estamos de acuerdo amigo vangodp. Aunque desecha el \n toma el último valor introducido válido, supongo que de la pila.

Prueba a entrar el caso 4, por ejemplo, y después en el menú principal introduce una letra y !voilá!, sale otra vez el caso cuarto y lo mismo en otros casos, como el 2. Al volver al menú principal y entra una letra vuelve al último caso seleccionado. Es precisamente el problema que planteaba venombrain.

En el código que propongo más arriba esto ya no se da con "opcion", aunque si se dará con las otras opciones que no he modificado. Aunque no sé por qué me da que algo no he hecho bien del todo. Funcionar funciona pero me da un no se qué......

¡¡¡Saluditos!!!

  #10 (permalink)  
Antiguo 25/06/2014, 08:42
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Quien Podría ayudarme?

Código lol:
Ver original
  1. Prueba a entrar el caso 4, por ejemplo, y después en el menú principal introduce una letra y !voilá!
Es normal con tanta linea de código ya es que me lio. Pegue el código mal XD
Lo arreglo pera >_<.
Centremos en el caso 4 que es el que me voy a pegar.
Después es cosa del dueño hacerlo completo sino me regaña dehn si lo pongo completo XD

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4.  
  5. void foo ( char );
  6.  
  7. int main () {
  8.     int opcion = 0;   //0 es el valor inicial ;)
  9.     char letra = 0;   //0 igual es el valor inicial ;)
  10.    
  11.     while ( opcion != 6 ) {
  12.    
  13.         printf ( "4.- Reconocedor de vocales\n6.- Salir\n\nIngrese Opcion: " );
  14.         scanf ( "%d%*c", &opcion ); //anula esta linea y quita el comentario a la deabajo y veras el error
  15.         //scanf ( "%d", &opcion );      //si tienes esta linea activada veras que nunca te va pedir una letra para ver si es vocal simplemente le va entrar el enter y si imprimes la variable letra veras que tiene el 10 de la tabla asc2.
  16.         system ( "cls" );
  17.        
  18.         //Este sera nuestro case 4 solo que en ves de case sera un if que debemos elejir 4 para simplificar la teoria ;)
  19.         if ( opcion == 4 ) {
  20.             printf ( "\nIngrese una letra: " );
  21.             scanf ( "%c", &letra );
  22.            
  23.             foo(letra);
  24.            
  25.             letra = 0;  // al salir es necesario devolver el valor inicial a esta variable para tenerla bajo control todo el tiempo.
  26.             opcion = 0; // A esta no es obligado devolverle el valor inicial pero si lo hacemos tenemos nosotros el control ;)
  27.             getch();
  28.             system ( "cls" );
  29.         }
  30.          
  31.         else {
  32.             if(opcion==6){
  33.                 printf("Bay!\n");
  34.                 break;
  35.             }
  36.             system ( "cls" );                
  37.             printf ( "Elige 4 o 6" );
  38.             getch();
  39.             system ( "cls" );        
  40.         }
  41.        
  42.     }
  43.    
  44.     system ( "pause" );
  45.     return 0;
  46. }
  47.  
  48. void foo ( char letra ) {
  49.     if ( letra == 'a' || letra == 'e' || letra == 'i' || letra == 'o' || letra == 'u' || letra == 'A' || letra == 'E' || letra == 'I' || letra == 'O' || letra == 'U' ) {
  50.         printf ( "La letra %c es una vocal\n", letra );
  51.     } else  {
  52.         printf ( "La letra %c no es una vocal\n", letra );
  53.     }
  54. }


¿Cual es el problema ahora? Ninguno verdad?

El problema era que si no ignoras el enter el se va meter en letra y te va decir que no es una vocal.
Si no estoy correcto dejare la profesión de programador jajaj
Nunca lo he sido >_<
Encuanto a:
Código LOL:
Ver original
  1. el problema que planteaba venombrain
Eso se debe a que no devuelve el valor inicial a letra al terminar de usarla en case4 (no digo en otros por que no los mire) y siempre letra sera la primera opción que elija unido al problema del enter el brain se queda echo un lio XD

Pero si no es así que alguien me explique massss que me gusta aprender :3

Última edición por vangodp; 25/06/2014 a las 08:50
  #11 (permalink)  
Antiguo 25/06/2014, 09:28
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
Puntos: 49
Respuesta: Quien Podría ayudarme?

Cita:
4.- Reconocedor de vocales
6.- Salir

Ingrese Opcion: 4

Ingrese una letra: 1
La letra 1 no es una vocal
4.- Reconocedor de vocales
6.- Salir

Ingrese Opcion: a
Elige 4 o 64.- Reconocedor de vocales
6.- Salir

Ingrese Opcion: Elige 4 o 64.- Reconocedor de vocales
6.- Salir

Ingrese Opcion: Elige 4 o 64.- Reconocedor de vocales
6.- Salir

Ingrese Opcion: Elige 4 o 64.- Reconocedor de vocales
6.- Salir

Ingrese Opcion: Elige 4 o 6
Creo que te faltó:

Código C++:
Ver original
  1. scanf ( "%c%*c", &letra );

Un fuerte saludo vangodp

¡¡¡Saluditos!!!


Última edición por leosansan; 25/06/2014 a las 09:44
  #12 (permalink)  
Antiguo 25/06/2014, 11:32
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Quien Podría ayudarme?

pfff mira que hay personas que dicen que c++ es complicado pero no me complico tanta en c++ XD
El buffer este tiene tarea

Etiquetas: c++
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:39.