Iba a crear un tema nuevo. Pero la duda es exactamente la misma.Tengo entendido que al ingresar datos y presionar Enter, éste último es tomado como entrada (también). Y por ello es necesario limpiar el buffer.
Sin embargo, no comprendo muy bien cómo es que funciona
getchar();Es decir, no sólo quisiera saber la finalidad por la que se usado getchar, sino más bien, qué es lo que hace exactamente. Es decir, toma un caracter del buffer, pero si éste está vacío, le solicita al usuario que ingrese uno, ¿es más o menos así?
Dispongo de dos códigos para limpiar el buffer.
char ch;
while (cin.get(ch) && ch != '\n')
;
while (getchar() != '\n');
Duda #1. Quisiera saber cómo es el mecanismo interno (minucioso) de todo el proceso que ejecutan cada una de esas instrucciones (aunque no las hay, porque yo sólo veo un while, ¿será que getchar() y cin.get tienen la capacidad de suprimir caracteres?).
Duda #2. ¿En qué casos es necesario limpiar el buffer? ¿Por qué?
Duda #3. ¿Es lo mismo buffer que stream? ¿Y qué es un flujo?
Una duda un poco más alejada del tema:
Duda #4. Cuando declaro variables de un tipo y el usuario ingresa datos de otro tipo, en muchas ocasiones se entra en un bucle infinito, lo que normalmente no ocurriría si el usuario ingresara lo que se le solicita. O también ocurre esto cuando el usuario ingresa más contenido del permitido. ¿Cómo podría yo asegurar la entrada correcta de datos? Por ejemplo, usar isalpha o isdigit no tiene sentido en este caso, ya que esa comprobación sólo la podría hacer yo luego de que ya se ha ejecutado el cin>> (¿O sí es posible usarlos sobre el valor que se está tratando de ingresar justamente antes de almacenarlo?).
PD: Siempre veo que recomiendan enlaces de conclase, y yo nunca he podido ingresar (de ninguno de mis navegadores). ¿Sólo yo no lo puedo ver?
Muchas gracias de antemano. Espero puedan responderme!