vendredi 3 avril 2015

Function checking valid input, loop repeating continuosly

I have this code and I cant get out of the 'while' loop in 'elegir()' function. When input is bad it keeps looping forever. I know that I can accomplish it with if else conditionals, but I wanna know if it is possible to make it run with 'while'. Thanks.



Code here:
#include "stdafx.h"
#include <iostream>

int const strsize = 100;
struct bop {
char fullname[strsize]; // real name
char title[strsize]; // job title
char bopname[strsize]; // secret BOP name
int preference; //89 0 = fullname, 1 = title, 2 = bopname
};
char elegir();
using namespace std;
int main(){

bop miembros[3] = {
{
"Luciano",
"Doctor",
"Zahyr",
1
},
{
"Sabrina",
"Licenciada",
"Mumu",
2
},
{
"Andres",
"Verdulero",
"Uruguayo",
0
}
};

cout
<< "Elija como desea que se muestren los miembros de la 'Orden':" << endl
<< "a) Por nombre b) Por titulo\n"
"c) Por nombre secreto d) Por la eleccion del miembro\n";
char eleccion;

eleccion = elegir();
while (eleccion == 'a' || eleccion == 'b' || eleccion == 'c' || eleccion == 'd'){
switch (eleccion){

case 'a' : cout << "Mostrando miembros por 'Nombre':\n";
for (int x=0;x<3;x++){
cout << miembros[x].fullname << endl;
}; break;
case 'b' : cout << "Mostrando miembros por 'Titulo':\n";
for (int x=0;x<3;x++){
cout << miembros[x].title << endl;
}; break;
case 'c' : cout << "Mostrando miembros por 'Nombre secreto':\n";
for (int x=0;x<3;x++){
cout << miembros[x].bopname << endl;
}; break;
case 'd' : cout << "Mostrando miembros por preferencia del miembro: \n";
for (int x=0;x<3;x++){
if ( miembros[x].preference == 0 )
cout << miembros[x].fullname << endl;
else if ( miembros[x].preference == 1 )
cout << miembros[x].title << endl;
else
cout << miembros[x].bopname << endl;
}; break;


}
cin
>> eleccion;
}



return 0;
}
char elegir(){
char e;
cin
>> e;
cin.clear('\n');
while (e != 'a' || e != 'b' || e != 'c' || e != 'd'){
cout << "Eleccion incorrecta, elija nuevamente\n";
cin
>> e;
cin.clear('\n');
}
return e;
}

Aucun commentaire:

Enregistrer un commentaire