Tengo un nuevo problema con mi programa.
Mi código:
Código:
#include <iostream>
#include <fstream> // Librería para el manejo de archivos
#include <string> // Librería para el manejo de strings
#include <stdlib.h> // Librería para el uso de system("cls");
#include <ctype.h> // Librería para clasificar y transformar caracteres individuales
using namespace std;
bool ValidarNumeroIngresado(string NumeroLetras);
bool ValidarPalabra(int NumeroLetras, fstream &FicheroPalabras);
int main()
{
//Declaración de variables
fstream FicheroPalabras;
string NumeroLetras, Palabra;
/* Creamos el fichero con las palabras a adivinar
------------------------------------------------------------------------*/
cout << "Creando fichero con palabras..." << endl;
FicheroPalabras.open("palabras.txt", ios::out);
FicheroPalabras << "baloncesto\n";
FicheroPalabras << "beisbol\n";
FicheroPalabras << "futbol\n";
FicheroPalabras << "golf\n";
FicheroPalabras << "rugby\n";
FicheroPalabras << "tenis\n";
FicheroPalabras << "boxeo\n";
FicheroPalabras << "sumo\n";
FicheroPalabras << "judo\n";
FicheroPalabras << "nascar\n";
FicheroPalabras << "atletismo\n";
FicheroPalabras << "caminata\n";
FicheroPalabras << "ciclismo\n";
FicheroPalabras << "esgrima\n";
FicheroPalabras << "natacion\n";
FicheroPalabras << "polo\n";
FicheroPalabras << "clavados\n";
FicheroPalabras << "remo\n";
FicheroPalabras << "vela\n";
FicheroPalabras << "ajedrez";
FicheroPalabras.close();
cout << "Fichero creado exitosamente..." << endl;
/* Header del programa
------------------------------------------------------------------------*/
cout << "\nJuego de El Ahorcado\n--------------------" << endl;
cout << "Tema: Deportes\n" << endl;
/* Content del programa
------------------------------------------------------------------------*/
do
{
cout << "N\243mero de letras de la palabra: ";
getline(cin, NumeroLetras);
} while(ValidarNumeroIngresado(NumeroLetras) && ValidarPalabra(atoi(NumeroLetras.c_str()), FicheroPalabras));
return 0;
}
/* Validar el número ingresado
------------------------------------------------------------------------*/
bool ValidarNumeroIngresado(string NumeroLetras)
{
/*
La función "isdigit" revisa que todos los caracteres de la cadena sean números.
Esta función perternece a la Librería <ctype.h>.
*/
if (isdigit(NumeroLetras[0]))
{
cout << "\n\tEnhorabuena!, n\243mero v\240lido...\n" << endl;
return false;
}
else
{
cout << "\n\tError!, n\243mero inv\240lido...\n" << endl;
return true;
}
}
/* Validar que exista una palabra con el número de letras ingresado
------------------------------------------------------------------------*/
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 << "Error!, no hay palabras de " << NumeroLetras << " letras en el juego..." << endl;
return true;
}
else
{
getline(FicheroPalabras, Palabra);
if (Palabra.size() == NumeroLetras)
{
PalabraEncontrada = false;
cout << "Palabra de " << NumeroLetras << " letras encontrada..." << endl;
return false;
}
}
}
FicheroPalabras.close();
}
Debo replicar el juego de EL AHORCADO.
Pasos que hago:
- Pido el número de letras que debe tener la palabra a adivinar.
- Con la función "ValidarNumeroIngresado" valido que el dato ingresado sea un número y no cualquier otra cosa.
- Con la función "ValidarPalabra" valido que exista una palabra con esa cantidad de letras.
Entonces, quiero que el programa siga pidiendo el número de letras siempre y cuando:
- El dato ingresado no sea un número.
- Exista una palabra con la cantidad de letras.
Cómo hago esas dos validaciones dentro del WHILE?, no se me ocurre otra cosa y he dado mucha cabeza en este asunto.
Pensé que me iba a funcionar la forma que tengo, pero no funciona.
Alguna ayuda por favor de alguien con experiencia en estos casos?.
Ahora mismo el programa funciona, pero no me muestra los mensajes de que si encontró o no una palabra con esa cantidad de letras (segunda validación en el WHILE), estoy pensando que el programa esta obviando esa parte.
Ayuda por favor