Estoy intentando validar un número entero ingresado por el usuario (getUserInteger). Cuando el valor de la entrada no es un número entero, se supone que el bucle while borra el búfer, restablece el estado de error del búfer, imprime "entrada incorrecta, vuelve a intentarlo": y luego solicite un nuevo número.
Parece que todo funciona bien hasta que se solicita un nuevo número. "cin>> número" dentro del bucle nunca parece "acertar" y continúa iterando a través del bucle y buscando una "entrada incorrecta ...". Por mi vida no puedo entender por qué. ¡Gracias por la ayuda!
#include <iostream>
#include <string>
#include <limits>
using namespace std;
// ----- Prototypes -----
int getUserInteger();
// ----- Main -----
int main (){
int userNumber;
userNumber = getUserInteger();
}
// ----- Functions -----
int getUserInteger() {
int number;
cin >> number;
while ( cin.fail() ) { // read failed, not int?
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //clear buffer through 'enter'
cin.clear(); // reset error buffer
cout << "bad entry, try again: " << endl;
cin >> number;
}
return number;
}
------------------------------------
cin.ignorare debería venir después de cin.clear.
Incorrecto:
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //clear buffer through 'enter'
cin.clear(); // reset error buffer
Corregido:
cin.clear(); // reset error buffer
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //clear buffer through 'enter'
------------------------------------
_cin.ignore debe aparecer después de cin.clear.
#Incorrecto:
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //clear buffer through 'enter'
cin.clear(); // reset error buffer
Corregido:
cin.clear(); // reset error buffer
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //clear buffer through 'enter'
Compartir
Seguir
respondido
22 de abril de 2021 a las 19:10
sieucapcutee
sieucapcutee
1
1
1 insignia de bronce