Bueno, pues como dice el titulo, algo sucede, que no consigo salir del ciclo
cout << endl << "Escriba /help si necesitas ayuda." << endl;
string help;
cin >> help;
while (help != "/help" || "/informacion" || "/automatico" || "/console"){
cout << endl << help << " no se conoce como un parametro." << endl;
cin >> help;
}
if(help == "/help"){
cout << endl << "- Comandos básicos - " << endl;
cout << "---------------------" << endl;
cout << "/automatico Este comando hará el calculo automáticamente y de forma simple." << endl;
cout << "/console Este comando hará el calculo mediante parámetros. " << endl;
cout << "/informacion Este comando proporcionará información del creador." << endl;
}else if(help == "/informacion"){
cout << "Programa creado por aitor. Gracias por utilizar el programa." << endl;
}else{
cout << "No funciona" << endl; }
Se supone que si escribes algo diferente de esos 4 "parámetros" entras en un ciclo, que te advierte, que no se conoce dicho parámetro, y te vuelve a pedir que escribas bien lo que querías escribir, el problema está que al escribir /help /informacion /atuomatico /console , no sale del ciclo y sigue advirtiendo de que dicho parámetro no se conoce....
Gracias de antemano.
sintaxis de un while: while(condicion), lo que en tu caso se puede desgranar en : while (condicion OR condicion OR condicion OR ....)
Tu has puesto while(condicion OR literal OR literal ...)
while (help != "/help" || help != "/informacion" || help != "/automatico" || help != "/console"){
Cita de: Oblivi0n en 28 Julio 2013, 18:36 PM
sintaxis de un while: while(condicion), lo que en tu caso se puede desgranar en : while (condicion OR condicion OR condicion OR ....)
Tu has puesto while(condicion OR literal OR literal ...)
while (help != "/help" || help != "/informacion" || help != "/automatico" || help != "/console"){
Perdona, no te sigo, realmente acabo de "empezar" y ando haciendo pruebas a mansalva.
¿A qué te refieres con condicion || literal?
Gracias de antemano.
EDITO:Vale, ya leí en msdn a que se refiere con literal, y ya vi el fallo, perdona la molestia!
muchas gracias...!
RE EDITO:con;
while (help != "/help" || help != "/informacion" || help != "/automatico" || help != "/console"){
cout << endl << help << " no se conoce como un parametro." << endl;
cin >> help;
}
No salta el ciclo, pero con
while (help != "/help"){
cout << endl << help << " no se conoce como un parametro." << endl;
cin >> help;
}
Si lo hace, y sigo sin ver el problema.
RE RE EDITO (QUE PESADITO SOY)Lo solucioné cambiando el || por && aunque no comprendo porque no funciona de la otra forma...
while (help != "/help" && help != "/informacion"){
cout << endl << help << " no se conoce como un parametro." << endl;
cin >> help;
}
¡Gracias! y si alguien podría darme una explicación de porque or no sirve pero and si, se lo agradecería mucho.
¡Un saludo!
Cita de: #Aitor en 28 Julio 2013, 18:50 PMLo solucioné cambiando el || por && aunque no comprendo porque no funciona de la otra forma...
while (help != "/help" && help != "/informacion"){
cout << endl << help << " no se conoce como un parametro." << endl;
cin >> help;
}
¡Gracias! y si alguien podría darme una explicación de porque or no sirve pero and si, se lo agradecería mucho.
¡Un saludo!
El operador || sería valido si estuvieras comprobando una igualdad.
Pero estás descartando posibilidades, asi que tienes que descartarlas todas uniendolas con el operador &&
Puedes leerlo en lenguaje humano como: "mientras sea diferente de... y diferente de... y diferente de..."
Es decir, si es diferente de cualquiera de esas palabras van a continuar las iteraciones.
Si usas el operador lógico OR jamás acabaría porque... ser diferente de X o de Y siempre se cumplirá.
Sea cual fuere la entrada, dicha condición siempre será verdadera... porque para ser falsa tendría que ingresarse algo que sea igual a X y Y simultáneamente y eso es imposible porque X y Y son distintos y una expresión (o una variable) no puede tener 2 valores a la vez.