es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué significa exactamente “entrada vacía” para cin.get()?

Creo que es una pregunta simple, pero no entiendo el concepto en este fragmento de código, principalmente en el bucle while:

#include <iostream>

const int ArSize = 10;
void strcount(const char * str);

int main(){
    using namespace std;
    char input[ArSize];
    char next;


    cout << "Introduzca texto:\n";
    cin.get(input, ArSize);
    while(cin){

        cin.get(next);
        while(next != '\n')
            cin.get(next)

        strcount(input);
        cout << "Introduzca la siguiente línea, una línea vacía termina el programa:\n";
        cin.get(input, ArSize);
    }

    cout << "Fin del programa\n";
    return 0;
}

...

Lo que entiendo es que el bucle while continúa hasta que cin devuelve falso. Filtra la entrada restante que queda en el búfer (porque no era del tamaño de ArSize o menos, o porque era un salto de línea, en cuyo caso simplemente filtrará el carácter de salto de línea) hasta que encuentre el carácter de salto de línea. Luego cuenta los caracteres de la cadena (no es importante en esta pregunta) y luego, digamos que alguien simplemente presiona Enter. cin.get() descarta el carácter de salto de línea en la entrada. Entonces, si alguien por ejemplo ingresa una línea vacía de texto en la terminal, se considera una entrada “fallida” y cin devuelve falso. ¿Porque si alguien continúa en la nueva línea, solo presionando Enter, deja el carácter de salto de línea en el búfer, y cin.get() no puede obtenerlo, por lo que devuelve falso? ¿O estoy equivocado?

En resumen, ¿qué sucede exactamente si solo presiona Enter? cin.get() no puede obtener la entrada porque solo hay un salto de línea en el búfer y lo cuenta como una entrada “fallida”, ¿por lo que devuelve falso?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, tienes razón en tu entendimiento. Cuando el usuario presiona enter, se crea un carácter de nueva línea en el búfer de entrada, que la función cin.get() intenta leer. Sin embargo, como no es un carácter válido según el tamaño del búfer de entrada (ArSize en este caso), el objeto cin lo interpreta como una entrada fallida y devuelve falso, lo que hace que el bucle termine. Es por eso que el comentario en el código dice que una línea vacía termina el programa, ya que desencadena este comportamiento.

Comments are closed.