elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Cómo evaluar el tipo de una variable en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cómo evaluar el tipo de una variable en C++  (Leído 3,510 veces)
Ali Baba


Desconectado Desconectado

Mensajes: 310


Ver Perfil WWW
Cómo evaluar el tipo de una variable en C++
« en: 22 Marzo 2020, 17:14 pm »

Intentando buscar en Google y no me aparece nada claro. Intento evaluar que un dato introducido por una usuario en un programa de C++ sea un número. No se, alguna alternativa como la que hay en javascript del typeof?


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.057



Ver Perfil
Re: Cómo evaluar el tipo de una variable en C++
« Respuesta #1 en: 22 Marzo 2020, 20:40 pm »

Saludos,

- De primeras podrías pre-validar al momento de recibir los datos por parte del usuario. Cuando declaras una variable de cierto tipo y le asignas un valor por medio de cin >> variable ocurren algunas cosas interesantes.

- Dependiendo del tipo de variable se intentará convertir implícitamente el dato de entrada al tipo correspondiente a la variable.

-- Pueden ocurrir por lo menos 4 cosas:

1. El dato se a podido convertir sin problemas. Ej.: 54, 5.3, 4Km, -8, -9.3, +77
2. El dato no se a podido convertir. Ej.: pepe, c11, --9, ++6, @, #123
3. El dato es un caracter de fin de línea. Ej.: Ctrl + Z para windows y Ctrl + D linux
4. Error fatal, algo a ido muy mal y el programa no puede continuar.

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.  
  7.  int num = 0;
  8.  
  9.  cout << "Escribe un número: ";
  10.  cin >> num;
  11.  
  12.  if ( cin.good() ) {
  13.    cout << "Es un número" << endl;
  14.  } else if ( cin.eof() ) {
  15.    cout << "Ha presionado EOF (^Z | ^D)" << endl;
  16.  } else if ( cin.fail() ) {
  17.    cout << "No es un número" << endl;
  18.  } else if ( cin.bad() ) {
  19.    cout << "Error fatal" << endl;
  20.  }
  21.  cin.clear(); // Restablece los errores
  22.  
  23.  cout << endl << "num: " << num << endl;
  24.  
  25.  cin.ignore( 255, '\n' ); // Vaciar buffer de entrada
  26.  cin.get();               // Pausa
  27.  return 0;
  28. }


En línea

K-YreX


Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Cómo evaluar el tipo de una variable en C++
« Respuesta #2 en: 23 Marzo 2020, 01:44 am »

Otra opción posible sería guardar la entrada en un string y a partir de ahí validar esa entrada antes de convertirla al dato que quieres.
Te recomendaría echar un vistazo a la biblioteca <cctype>: http://www.cplusplus.com/reference/cctype/
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Ali Baba


Desconectado Desconectado

Mensajes: 310


Ver Perfil WWW
Re: Cómo evaluar el tipo de una variable en C++
« Respuesta #3 en: 29 Marzo 2020, 07:25 am »

Otra opción posible sería guardar la entrada en un string y a partir de ahí validar esa entrada antes de convertirla al dato que quieres.
Te recomendaría echar un vistazo a la biblioteca <cctype>: http://www.cplusplus.com/reference/cctype/

Algo de eso había visto. Y no me quedaba claro. A ver si entendí ¿Las funciones de esa biblioteca válida los caracteres de un string?
En línea

K-YreX


Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Cómo evaluar el tipo de una variable en C++
« Respuesta #4 en: 30 Marzo 2020, 03:53 am »

Algo de eso había visto. Y no me quedaba claro. A ver si entendí ¿Las funciones de esa biblioteca válida los caracteres de un string?
Exacto. Son funciones que permiten validar caracteres y por lo tanto permiten recorrer un string y validar los caracteres uno a uno. Por ejemplo:
Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cctype>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.    string frase = "3ST4 ES UNA FRA5E P4R4 BU5C4R NUM3R0S";
  9.    int contadorNumeros = 0;
  10.  
  11.    // Recorremos el string caracter a caracter...
  12.    for(int i = 0; i < frase.length(); ++i){
  13.        if(isdigit(frase[i])){  // ...y si el caracter actual es un numero (decimal), incrementamos el contador
  14.            ++contadorNumeros;
  15.        }
  16.    }
  17.    cout << "La frase tiene: " << contadorNumeros << " numeros" << endl;
  18. }

El resto de funciones puedes verlas en el enlace del mensaje anterior. Lo vuelvo a poner aquí: http://www.cplusplus.com/reference/cctype/
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Ali Baba


Desconectado Desconectado

Mensajes: 310


Ver Perfil WWW
Re: Cómo evaluar el tipo de una variable en C++
« Respuesta #5 en: 4 Abril 2020, 05:22 am »

Exacto. Son funciones que permiten validar caracteres y por lo tanto permiten recorrer un string y validar los caracteres uno a uno. Por ejemplo:
Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cctype>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.    string frase = "3ST4 ES UNA FRA5E P4R4 BU5C4R NUM3R0S";
  9.    int contadorNumeros = 0;
  10.  
  11.    // Recorremos el string caracter a caracter...
  12.    for(int i = 0; i < frase.length(); ++i){
  13.        if(isdigit(frase[i])){  // ...y si el caracter actual es un numero (decimal), incrementamos el contador
  14.            ++contadorNumeros;
  15.        }
  16.    }
  17.    cout << "La frase tiene: " << contadorNumeros << " numeros" << endl;
  18. }

El resto de funciones puedes verlas en el enlace del mensaje anterior. Lo vuelvo a poner aquí: http://www.cplusplus.com/reference/cctype/

Muchísimas gracias.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines