Basic c ++ program to return if a number is greater or less than 10

3

Hello I just started in c ++ and I want to make a program that takes a number entered by the user through the keyboard and returns if it is equal, greater or less than 10, to learn how the language works. The problem is that I had achieved it until I wanted to add that I do not take values that are not numbers, in which case I see a msj that says it is not a number, and now it does not detect me correctly when it is higher, when it is smaller or when It's not a number and it all spreads, I do not know what I'm missing.

#include "iostream"
#include "conio.h"
#include "cstdlib"
#include "stdio.h"

using namespace std;


int main(){

    int numero;

    cout << "Vamos a evaluar si un numero es menor que 10 \n" << endl;
    cout << "Ingrese un numero por favor..." << endl;
    cin >> numero;

    if (isdigit(numero)) {
        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;
}
    
asked by Hernan Rodriguez 19.12.2016 в 23:10
source

3 answers

5

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; }
    
answered by 19.12.2016 / 23:38
source
0

According to the documentation :

  

Checks if c is a decimal digit character.

     

Decimal digits are any of: 0 1 2 3 4 5 6 7 8 9

If your input is 10 , it may not be recognized as "digit".

Use another way to validate if the input is a valid number.

    
answered by 19.12.2016 в 23:54
0

you could use the atoi function and validate it with a do while from the ascii from 0 to 9 in single quotes and if you enter some character or string t will ask you to enter again you can put a message inside the do while Did you understand?

    
answered by 20.12.2016 в 03:14