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?
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.
#include <iostream>
using namespace std;
int main() {
int num = 0;
cout << "Escribe un número: ";
cin >> num;
if ( cin.good() ) {
cout << "Es un número" << endl;
} else if ( cin.eof() ) {
cout << "Ha presionado EOF (^Z | ^D)" << endl;
} else if ( cin.fail() ) {
cout << "No es un número" << endl;
} else if ( cin.bad() ) {
cout << "Error fatal" << endl;
}
cin.clear(); // Restablece los errores
cout << endl << "num: " << num << endl;
cin.ignore( 255, '\n' ); // Vaciar buffer de entrada
cin.get(); // Pausa
return 0;
}
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/
Cita de: YreX-DwX 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/
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?
Cita de: Diesan Romero en 29 Marzo 2020, 07:25 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:
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int main(){
string frase = "3ST4 ES UNA FRA5E P4R4 BU5C4R NUM3R0S";
int contadorNumeros = 0;
// Recorremos el string caracter a caracter...
for(int i = 0; i < frase.length(); ++i){
if(isdigit(frase[i])){ // ...y si el caracter actual es un numero (decimal), incrementamos el contador
++contadorNumeros;
}
}
cout << "La frase tiene: " << contadorNumeros << " numeros" << endl;
}
El resto de funciones puedes verlas en el enlace del mensaje anterior. Lo vuelvo a poner aquí: http://www.cplusplus.com/reference/cctype/
Cita de: YreX-DwX en 30 Marzo 2020, 03:53 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:
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int main(){
string frase = "3ST4 ES UNA FRA5E P4R4 BU5C4R NUM3R0S";
int contadorNumeros = 0;
// Recorremos el string caracter a caracter...
for(int i = 0; i < frase.length(); ++i){
if(isdigit(frase[i])){ // ...y si el caracter actual es un numero (decimal), incrementamos el contador
++contadorNumeros;
}
}
cout << "La frase tiene: " << contadorNumeros << " numeros" << endl;
}
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.