Entrada de caracteres en el ciclo while usando C++
Esta guía trivial discutirá el manejo de entradas en C++. Además, analizaremos el problema de abordar las entradas no válidas por parte del usuario. Por último, discutiremos cómo se puede tomar la entrada del usuario usando el bucle while
.
En primer lugar, se debe conocer el procedimiento para tomar datos de entrada del usuario en C++. La librería iostream
en C++ nos proporciona la función cin
. Tomará la entrada del usuario y almacenará el valor en la variable que se utiliza.
Ejemplo de código:
int x;
cin >> x;
En este código, x
es una variable entera
declarada en la línea n.° 1, y la entrada se realiza en la línea n.° 2. cin
solicitará al usuario que ingrese los datos y almacene esos datos en la variable x
. Este valor debe ser un valor entero
; de lo contrario, el valor se guardará parcialmente en x
o no se guardará.
Utilice el bucle while
con la función cin
en C++
Considere otro ejemplo en el que queremos tomar múltiples entradas hasta que el usuario ingrese algunos datos no válidos. Si se ingresan algunos datos no válidos, la entrada debe cerrarse.
Código:
int main() {
int a;
;
while (cin >> a) {
cout << "You entered the correct input value" << endl;
}
cout << "Sorry, you have entered wrong type of data." << endl;
}
Producción:
Se le solicita al usuario que ingrese un valor, e ingresamos el valor 2
, que es un valor int
. Entonces, el bucle continúa iterando y nuevamente se le solicita al usuario.
Después de tres intentos, ingresamos algunos caracteres (es decir, abc
) que no son del tipo int
. Esto hace que el flujo de entrada estándar (asociado con cin
) se destruya, y la expresión cin >> a
devuelve false
.
Por lo tanto, el bucle se rompe y el control se desplaza a la línea fuera del bucle. Podemos restringir el ingreso de algunos datos no válidos de esta manera.
En el siguiente ejemplo se muestra otra forma de lograr la misma tarea.
Código:
int main() {
int a;
;
while (cin) {
cin >> a;
cout << "You entered the correct input value" << endl;
}
cout << "Sorry, you have entered a wrong type of data." << endl;
}
Debemos saber que cin
tiene cuatro estados, es decir, bueno
, malo
, fallo
y EOF
. cin
está en su estado bueno
cuando se ejecuta el código anterior.
Hemos utilizado cin
como condición de bucle. Cuando el código comience a ejecutarse, cin
estará en un estado bueno
y devolverá true
.
Por lo tanto, el bucle while
se ejecutará y pedirá al usuario que introduzca un valor para a
.
Producción:
Tan pronto como se ingresan los datos incorrectos, el bucle no se interrumpe inmediatamente, sino después de una iteración.
Una vez que el flujo de entrada estándar asociado con cin
entra en un “estado de error”, no se pueden tomar más entradas hasta que el estado no se restablezca a “buen estado”. Podemos borrar el estado no válido de cin
usando la función cin.clear()
y la función cin.ignore(numeric_limits<streamsize>::max(), '\n')
para borrar entrada no válida de la transmisión.
Esto nos permitirá retomar las entradas del usuario sin interrumpir la ejecución.
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn