我有这个代码,我无法摆脱'elegir()'函数中的'while'循环。当输入不好时,它会永远循环。我知道我可以使用if else条件来完成它,但我想知道是否可以使用'while'来运行它。感谢。
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;
}
答案 0 :(得分:0)
你的问题就在这一行
while (e != 'a' || e != 'b' || e != 'c' || e != 'd'){
如果e
是&#39; a&#39;?
e != 'a' is false
e != 'b' is true
e != 'c' is true
e != 'd' is true
所以你的同时测试评估为
(false || true || true || true)
因为您正在使用||
评估
true
解决方案 - 请勿在此使用||
(或),使用&&
(和)
答案 1 :(得分:0)
除了The Dark答案的建议外,在要求输入之前,您还需要cin.clear()
。
//main()
cin.clear(); <-- include this line
cin >> eleccion;
//Similarly in elegir()
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.clear(); <-- include this line
cin >> e;
cin.clear('\n');
}
return e;
}
包含cin.clear()
清除错误标志,以防止无限循环。这是一个教程,可以帮助您详细了解,因为它包含示例