Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/11/2015, 08:44
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 16 años, 1 mes
Puntos: 5
Pregunta Respuesta: Hacer dos comprobaciones en un WHILE con funciones

Cita:
Iniciado por eferion Ver Mensaje
Ahí tienes un problema de razonamiento.

Lo que tu esperas realmente es que el bucle se repita siempre y cuando se cumpla, al menos, una de estas condiciones:
  • El dato ingresado no sea un número
  • NO exista una palabra con la cantidad de letras
Mientras que tu programa repite el bucle siempre y cuando se cumplan estas condiciones:
  • El dato ingresado SI sea un número
  • Exista una palabra con la cantidad de letras
Es decir, el bucle se va a repetir siempre que introduzcas un dato válido...

Con esto deberías ser capaz de arreglar tu problemilla con el programa.

Por cierto, no tiene demasiado sentido que la función ValidarPalabra reciba un ifstream. Básicamente porque no aprovecha la información que dicho ifstream pueda tener.... básicamente lo utilizas para abrir un fichero, leerlo y cerrarlo de nuevo.

Si la función esperase que el fichero estuviese ya abierto entonces sí tendría sentido que recibiese el stream como parámetro, ya que así podrías usar la misma función con diferentes ficheros... pero con el código actual te puedes ahorrar ese parámetro y declarar el stream dentro de la función.

Un saludo.
Hola, gracias hermano, resuelto.

Tengo un problemita mas.

Si corre el programa e ingresa:
Nombre: willis
Letras: 3

Le avisará que el número de letras es invalido porque no existen palabras con esa cantidad de letras.

Entonces, en la segunda iteración usted ingresa:
Nombre: willis
Letras: 4

También le notifica el mismo error, aunque si existen palabras de 4 letras.
Por qué?.

Haciendo un DEBUG, encontré esto:

Código:
bool ValidarPalabra(int NumeroLetras, fstream &FicheroPalabras)
{
    string Palabra;
    bool PalabraEncontrada = true;
    FicheroPalabras.open("palabras.txt", ios::in);
    while (PalabraEncontrada)
    {
        if (FicheroPalabras.eof())
        {
            PalabraEncontrada = false;
            cout << "\tError!, no hay palabras de " << NumeroLetras << " letras en el juego...\n" << endl;
            return true;
        }
        else
        {
            getline(FicheroPalabras, Palabra);
            if (Palabra.size() == NumeroLetras)
            {
                PalabraEncontrada = false;
                cout << "\tEnhorabuena!, palabra de " << NumeroLetras << " letras encontrada..." << endl;
                return false;
            }
        }
    }
    FicheroPalabras.close();
}
El programa siempre entra en el primer IF y por esa razón siempre retorna que no existen palabras con esa cantidad de letras.
Será porque se esta abriendo por segunda vez el fichero?, la verdad no se la razón.
Espero pueda ayudarme.