Aunque devolver 0 o 1 es correcto, es, al menos en mi opinión más apropiado utilizar el tipo bool que el lenguaje nos ofrece. Dicho tipo bool puede tomar dos valores: true (si es verdadero) o false (si es falso).
Vamos a tu código el error es muy simple.
Código C++:
Ver originalint NumeroLetras;
cin >> NumeroLetras; // Esto implica que el número que introduzca ya sea 5, 20 o 40000 se almacena en NumeroLetras
....
bool ValidarNumeroIngresado(int NumeroLetras){
if (NumeroLetras < 48 || NumeroLetras >57)
return false;
else
return true; // Devuelvo verdadero si el int esta en el rango [49,57]
Tu código devolverá verdadero sin introduzco por pantalla enteros del 49 al 57 ambos inclusive, que obviamente no es lo que quieres.
¿Cómo puedes solucionarlo? Hay mil y una forma de hacerlos pero vamos a centrarnos en la más simple para este pequeño trozo de código.
cin tiene asociados unos bits de estado que se activan bajo ciertas circunstancias. Vamos a ir a una circunstancia que provocaría dicho comportamiento. Si yo ejecutase tu programa y e introduzco alguna cosa que no es un entero el bit de fail se activa. Para comprobar que si dicho bit está activado está el método cin.fail().
Nota: Tanto fail() como otros tres bits de estado son comunes para todo flujo, ya sea cin/cout o un archivo fstream.
Además por la naturaleza de tu ejemplo, podemos estar seguros de que quieres un valor estrictamente mayor que 0 y menor o igual que el tamaño de la mayor palabra. Así pues una posible solución al problema encontrado sería:
Código C++:
Ver originalconst int kMAXTAM=10 // Supongo que la palabra más grande que puedo usar tiene 10 letras
int NumeroLetras;
cin >> NumeroLetras;
if(cin.fail() || NumeroLetras<=0 || NumeroLetras>kMAXTAM){
// Lo que se hace cuando no es correcto
}
else {
// Lo que se hace cuando es correcto
}