isdigit takes as a parameter, not an integer, and that's why the wrong behavior is due. You should create a new variable of type char to verify that the input by the user is a number, and then, if it is, kill it and make your comparisons.
Update : I include a code example to check numbers up to a thousand units. It's basic, but I hope you get an idea:
#include "iostream"
#include "conio.h"
#include "cstdlib"
#include "stdio.h"
using namespace std;
/*
Se inicializa el arreglo de caracteres para evitar cualquier caracter extraño o basura en las posiciones de memoria que ocupa
*/
void InicializarArreglo(char digitos[], int limite)
{
for (int indice = 0; indice < limite; indice++)
{
digitos[indice] = '#include "iostream"
#include "conio.h"
#include "cstdlib"
#include "stdio.h"
using namespace std;
/*
Se inicializa el arreglo de caracteres para evitar cualquier caracter extraño o basura en las posiciones de memoria que ocupa
*/
void InicializarArreglo(char digitos[], int limite)
{
for (int indice = 0; indice < limite; indice++)
{
digitos[indice] = '%pre%';
}
}
/*
Se verifica que cada uno de los caracteres sea un digito válido. No acepta enteros negativos
*/
bool ComprobarDigitos(char digitos[], int limite)
{
int indice = 0;
bool esValido = true;
while (indice < limite && digitos[indice]!=0)
{
if (!(isdigit(digitos[indice])))
{
esValido = false;
break;
}
indice++;
}
return esValido;
}
/*
Devuelve la cantidad de posiciones que fueron ocupadas dentro del arreglo
*/
int PosicionesUtilizadas(char digitos[], int limite)
{
int indice = 0;
while (digitos[indice] != '%pre%' && indice<limite)
{
indice++;
}
return indice;
}
/*
En base al numero de posiciones ocupadas, comienza con una base "1" para la unidad, luego se convierte en "10" para la decena, en "100" para la centena, etc.
Y antes de multiplicar, si debe restar 48 porque el valor númerico de los caracteres es un entero que corresponde a un código ASCCI, en este caso, los digitos del 0 al 9
tienen los codigos 48 al 57. El 0 es 48-48= 0. Para el 1 es 49-48= 1, etc.
*/
int ConvertirNumero(char digitos[], int limite)
{
int numero = 0;
int posicionesUtilizadas = 0;
posicionesUtilizadas = PosicionesUtilizadas(digitos, limite);
int base = 1;
for (int indice = posicionesUtilizadas-1; indice >= 0; indice--)
{
numero = numero + ((digitos[indice] - 48)*base);
base = base * 10;
}
return numero;
}
int main(){
const int limite = 5;
char arregloDigitos[limite];
int numero;
InicializarArreglo(arregloDigitos, limite);
cout << "Vamos a evaluar si un numero es menor que 10 \n" << endl;
cout << "Ingrese un numero por favor..." << endl;
cin >> arregloDigitos;
if (ComprobarDigitos(arregloDigitos, limite)) {
numero = ConvertirNumero(arregloDigitos, limite );
if (numero < 10){
cout << "El numero es menor que 10." << endl;
}
else if (numero == 10){
cout << "El numero es 10." << endl;
}
else if (numero > 10){
cout << "El numero es mayor que 10." << endl;
}
}
else {
cout << "Eso no es un numero!" << endl;
}
system("pause");
return 0;
}
';
}
}
/*
Se verifica que cada uno de los caracteres sea un digito válido. No acepta enteros negativos
*/
bool ComprobarDigitos(char digitos[], int limite)
{
int indice = 0;
bool esValido = true;
while (indice < limite && digitos[indice]!=0)
{
if (!(isdigit(digitos[indice])))
{
esValido = false;
break;
}
indice++;
}
return esValido;
}
/*
Devuelve la cantidad de posiciones que fueron ocupadas dentro del arreglo
*/
int PosicionesUtilizadas(char digitos[], int limite)
{
int indice = 0;
while (digitos[indice] != '%pre%' && indice<limite)
{
indice++;
}
return indice;
}
/*
En base al numero de posiciones ocupadas, comienza con una base "1" para la unidad, luego se convierte en "10" para la decena, en "100" para la centena, etc.
Y antes de multiplicar, si debe restar 48 porque el valor númerico de los caracteres es un entero que corresponde a un código ASCCI, en este caso, los digitos del 0 al 9
tienen los codigos 48 al 57. El 0 es 48-48= 0. Para el 1 es 49-48= 1, etc.
*/
int ConvertirNumero(char digitos[], int limite)
{
int numero = 0;
int posicionesUtilizadas = 0;
posicionesUtilizadas = PosicionesUtilizadas(digitos, limite);
int base = 1;
for (int indice = posicionesUtilizadas-1; indice >= 0; indice--)
{
numero = numero + ((digitos[indice] - 48)*base);
base = base * 10;
}
return numero;
}
int main(){
const int limite = 5;
char arregloDigitos[limite];
int numero;
InicializarArreglo(arregloDigitos, limite);
cout << "Vamos a evaluar si un numero es menor que 10 \n" << endl;
cout << "Ingrese un numero por favor..." << endl;
cin >> arregloDigitos;
if (ComprobarDigitos(arregloDigitos, limite)) {
numero = ConvertirNumero(arregloDigitos, limite );
if (numero < 10){
cout << "El numero es menor que 10." << endl;
}
else if (numero == 10){
cout << "El numero es 10." << endl;
}
else if (numero > 10){
cout << "El numero es mayor que 10." << endl;
}
}
else {
cout << "Eso no es un numero!" << endl;
}
system("pause");
return 0;
}