C++ While (No consigo salir del ciclo)

Iniciado por #Aitor, 28 Julio 2013, 18:24 PM

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

#Aitor

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.
Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}

Oblivi0n

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"){

#Aitor

#2
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!
Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}

amchacon

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 &&
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

zonahurbana

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.
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...