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

[SOLUCIONADO] menu c++

Estas en el tema de menu c++ en el foro de C/C++ en Foros del Web. necesito ayuda, quiero que se me ejcute un menu hasta que de a la opcion de salir pero con este codigo me funciona la primera ...
  #1 (permalink)  
Antiguo 23/11/2014, 07:26
 
Fecha de Ingreso: julio-2012
Mensajes: 106
Antigüedad: 11 años, 9 meses
Puntos: 2
menu c++

necesito ayuda, quiero que se me ejcute un menu hasta que de a la opcion de salir pero con este codigo me funciona la primera vez y luego se me ejcuta un bucle infinito, como lo podria hacer muchas gracias.
Código C++:
Ver original
  1. int main() {
  2.  
  3.     banco b;
  4.     char opcion;
  5.    
  6.     iniciar(b);
  7.    
  8.  
  9.      while(opcion!='5'){
  10.     cout <<"------------MENU------------"<< endl;
  11.     cout <<"1-Insertar "<<endl;
  12.     cout <<"2-Consultar "<<endl;
  13.     cout <<"3-Hacer un pedido "<<endl;
  14.     cout <<"4-Mostrar toda la información "<<endl;
  15.     cout <<"5-Salir"<<endl;
  16.     cout <<"----------------------------"<<endl;
  17.    
  18.     opcion=getchar();
  19.  
  20.  
  21.     switch(opcion){
  22.     case '1':
  23.  
  24.         ...
  25.         break;
  26.     case '2':
  27.  
  28.         ...
  29.         break;
  30.     case '3':
  31.         ..
  32.         break;
  33.     case '4':
  34.         ...
  35.         break;
  36.     case '5':
  37.         ..
  38.         break;
  39. }
  40.     }
  41.  
  42.  
  43.     return 0;
  44. }

Última edición por lenit; 23/11/2014 a las 07:57
  #2 (permalink)  
Antiguo 23/11/2014, 10:48
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: menu c++

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main() {
  5.  
  6.     //banco b;
  7.     char opcion;
  8.    
  9.     //iniciar ( b );
  10.    
  11.    
  12.     while ( opcion != '5' ) {
  13.         cout << "------------MENU------------" << endl;
  14.         cout << "1-Insertar " << endl;
  15.         cout << "2-Consultar " << endl;
  16.         cout << "3-Hacer un pedido " << endl;
  17.         cout << "4-Mostrar toda la información " << endl;
  18.         cout << "5-Salir" << endl;
  19.         cout << "----------------------------" << endl;
  20.        
  21.         scanf("%c%*c", &opcion);
  22.        
  23.        
  24.         switch ( opcion ) {
  25.             case '1':
  26.            
  27.                 //...
  28.                 break;
  29.                
  30.             case '2':
  31.            
  32.                 //...
  33.                 break;
  34.                
  35.             case '3':
  36.                 //..
  37.                 break;
  38.                
  39.             case '4':
  40.                 //...
  41.                 break;
  42.                
  43.             case '5':
  44.                 //..
  45.                 break;
  46.         }
  47.     }
  48.    
  49.    
  50.     return 0;
  51. }

Eso es por que tienes residuos enel buffer.
El dichoso enter '\n' te hace eso cuando se mete en el buffer.
El scanf("%c%*c", &opcion); toma un char pero ignora el enter que hace esos estragos en tu programa XDD

debes o bien limpiar el buffer o bien intentar que no se te cole enter en el.
Enter tambien es un char y por eso se da esos problemas.
Consulta por internet como limpiar el buffer. Si encuentras algo con fflush no lo uses XDDD
Suerte!
  #3 (permalink)  
Antiguo 23/11/2014, 11:32
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
Puntos: 49
Respuesta: menu c++

Cita:
Iniciado por vangodp Ver Mensaje
[HIGHLIGHT="C++"]

Eso es por que tienes residuos en el buffer.
El dichoso enter '\n' te hace eso cuando se mete en el buffer.
El scanf("%c%*c", &opcion); toma un char pero ignora el enter que hace esos estragos en tu programa XDD

debes o bien limpiar el buffer o bien intentar que no se te cole enter en el.
Enter tambien es un char y por eso se da esos problemas.
Si usas scanf deberás incluir la librería <cstdio>.

Pero si entra más de un caracter no servirá el %c%*c ya que sólo se "comería" el primer caracter de más, no así el \n en ese caso.

Más o menos algo como:

Código C++:
Ver original
  1. opcion = getchar () ;
  2. while ( getchar() != '\n' ) ;

sería válido en ambos casos.

¡¡¡Saluditos!!!

  #4 (permalink)  
Antiguo 23/11/2014, 12:49
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: menu c++

Cita:
Iniciado por leosansan Ver Mensaje
Si usas scanf deberás incluir la librería <cstdio>.

Pero si entra más de un caracter no servirá el %c%*c ya que sólo se "comería" el primer caracter de más, no así el \n en ese caso.

Más o menos algo como:

Código C++:
Ver original
  1. opcion = getchar () ;
  2. while ( getchar() != '\n' ) ;

sería válido en ambos casos.

¡¡¡Saluditos!!!

Lleva la razon. jaja
me lie.
En su código no pone headers pero deja claro que es C++.
Bueno pues siendo asi puede usar:
cin >> opcion;
cin.sync();

Tiene mas o menos el efecto esperado XDD.

char c;
string str;

cin >> c;
cin.sync();

getline (cin, str );

pruebe comentar la linea cin.sync() y vea como falla al no leer nada en getline XD.

  #5 (permalink)  
Antiguo 23/11/2014, 16:50
 
Fecha de Ingreso: julio-2012
Mensajes: 106
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: menu c++

muchas gracias!!! ya lo he podido resolver con cin.ignore()

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 02:21.