Ayuda lenguaje C pequeña duda

Iniciado por SKaY9, 11 Febrero 2013, 21:42 PM

0 Miembros y 1 Visitante están viendo este tema.

SKaY9

Buenas, tengo el siguiente codigo y lo que quiero es que me lea el menú y si le doy a la letra q se me finalice  el programa (que no se porque no me va cuando le doy a una letra pero si cuando le pongo un número) y que si por ejemplo le doy a la z o cualquier numero que no sea ni el 1 ni el 2 que me salga "Error: Opcion incorrecta" y vuelva otra vez a pedirme la opción, el problema es que me sale un bucle infinito y no se porque y lo que quiero es que me salga "Error: Opcion incorrecta" y vuelva a pedirme otra vez la opcion hasta que de al 1,2 o q.


#include <iostream>
using namespace std;
main(){

int opcion;
do {

cout<<"1- Nueva partida"<<endl;
cout<<"2- Cargar partida"<<endl;
cout<<"q- Salir"<<endl;
cout<<"Opcion:"<<endl;
cin>>opcion;

  switch (opcion){

case 1:

cout<<"1- Nueva partida"<<endl;

break;

case 2:

cout<<"2-  partida"<<endl;

break;


default:

cout<<"Error: Opcion incorrecta"<<endl;



  }


}while(opcion!=q);
   
}

leosansan

#1
Cita de: SKaY9 en 11 Febrero 2013, 21:42 PM
Buenas, tengo el siguiente codigo y lo que quiero ...................

Mejor tomar opción como char y así al entrar una letra no se colgará.

Fíjate en que ahora los case son 'Nº ':


Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
int main(){

char opcion;
 do {

   cout<<"1- Nueva partida"<<endl;
   cout<<"2- Cargar partida"<<endl;
   cout<<"3- Salir"<<endl;

     cout<<"Opcion:"<<endl;
   cin>>opcion;
     switch (opcion){
       case '1':
         cout<<"1- Nueva partida"<<endl;
         break;
       case '2':
         cout<<"2-  partida"<<endl;
         break;
       case '3':
         cout<<"3-  Adios"<<endl;
         break;
       default:
         cout<<"Error: Opcion incorrecta"<<endl;
     }
 }while(opcion!='3');
 return 0;
}



Otra opción es "comerse" el carácter no válido:

Código (cpp) [Seleccionar]

#include <iostream>
#include <stdio.h>
using namespace std;
int main(){

int opcion;
  do {

    cout<<"1- Nueva partida"<<endl;
    cout<<"2- Cargar partida"<<endl;
    cout<<"3- Salir"<<endl;

      cout<<"Opcion:"<<endl;
    cin>>opcion;
    while ( getchar() != '\n' );
      switch (opcion){
        case 1:
          cout<<"1- Nueva partida"<<endl<<endl;
          break;
        case 2:
          cout<<"2-  partida"<<endl<<endl;
          break;
        case 3:
          cout<<"3-  Adios"<<endl<<endl;
          break;
        default:
          cout<<"Error: Opcion incorrecta"<<endl<<endl;
      }

  }while(opcion!=3);
  return 0;
}

Saluditos!.

do-while

#2
¡Buenas!

No te leera caracteres porque espera leer un entero. Cuando introduzcas un caracter comprueba el failbit de cin (cin.fail()). Supongo que se te activara.

Código (cpp) [Seleccionar]


if(cin.fail())
{
   cout << "Error de lectura." << endl;
   return 0;
}


En este caso, como las opciones del menu no llegan a los dos digitos, como bien te ha dicho leosansan, puedes utilzar un caracter para leer la opcion del menu. Sino, utiliza un valor numerico tambien para la opcion de salir. Pero no mezcles valores numericos y caracteres.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

SKaY9

Era que tenia que poner al valor opcion un char y no un int, ya que cuando ponia una letra me salia el bucle infinito, que error más tonto cometi y el tiempo que estuve pensando porque y no lograba averiguarlo, gracias por el aporte.