Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: #Aitor en 28 Julio 2013, 18:24 PM

Título: C++ While (No consigo salir del ciclo)
Publicado por: #Aitor en 28 Julio 2013, 18:24 PM
Bueno, pues como dice el titulo, algo sucede, que no consigo salir del ciclo

Código (c++) [Seleccionar]

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.
Título: Re: C++ While (No consigo salir del ciclo)
Publicado por: 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"){
Título: Re: C++ While (No consigo salir del ciclo)
Publicado por: #Aitor en 28 Julio 2013, 18:50 PM
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;

Código (c++) [Seleccionar]


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

Código (c++) [Seleccionar]

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...

Código (c++) [Seleccionar]
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!
Título: Re: C++ While (No consigo salir del ciclo)
Publicado por: amchacon en 28 Julio 2013, 20:41 PM
Cita de: #Aitor en 28 Julio 2013, 18:50 PMLo solucioné cambiando el || por &&  aunque no comprendo porque no funciona de la otra forma...

Código (c++) [Seleccionar]
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 &&
Título: Re: C++ While (No consigo salir del ciclo)
Publicado por: zonahurbana en 29 Julio 2013, 00:01 AM
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.