c++ - usar - ¿Cómo puedo evitar la entrada de caracteres para una variable int?
leer cadena de caracteres en c (3)
El siguiente programa muestra un valor ''int'' que se ingresa y sale al mismo tiempo. Sin embargo, cuando entré a un personaje, entra en un ciclo infinito que muestra el valor ''int'' anterior ingresado. ¿Cómo puedo evitar que se ingrese un personaje?
#include<iostream>
using namespace std;
int main(){
int n;
while(n!=0){
cin>>n;
cout<<n<<endl;
}
return 0;
}
Si desea usar la función de definición de usuario, puede usar el valor ascii / ansi para restringir la entrada de char.
48 -57 es el rango de los valores de 0 a 9
Motivo del bucle infinito:
cin entra en un estado fallido y eso hace que ignore otras llamadas hasta que se restablecen el indicador de error y el búfer.
cin.clear();
cin.ignore(100, ''/n''); //100 --> asks cin to discard 100 characters from the input stream.
Verifica si la entrada es numérica:
En su código, incluso un tipo no int se convierte a int de todos modos. No hay forma de comprobar si la entrada es numérica, sin tomar entrada en una matriz char, y llamando a la función isdigit()
en cada dígito.
La función isdigit () se puede usar para distinguir dígitos y alfabetos. Esta función está presente en el encabezado <cctype>
.
Una función is_int () se vería así.
for(int i=0; char[i]!=''/0'';i++){
if(!isdigit(str[i]))
return false;
}
return true;
#include <iostream>
#include <climits> // for INT_MAX limits
using namespace std;
int main()
{
int num;
cout << "Enter a number./n";
cin >> num;
// input validation
while (cin.fail())
{
cin.clear(); // clear input buffer to restore cin to a usable state
cin.ignore(INT_MAX, ''/n''); // ignore last input
cout << "You can only enter numbers./n";
cout << "Enter a number./n";
cin >> num;
}
}