¿Cómo usar getline() en C++ cuando hay líneas en blanco en la entrada?

En C++, si necesitamos leer algunas oraciones de una secuencia, la forma generalmente preferida es usar la función getline() , ya que puede leer secuencias de strings hasta que encuentra una nueva línea o ve un delimitador proporcionado por el usuario. Además, utiliza el archivo de encabezado <string.h> para ser completamente funcional.

Aquí hay un programa de muestra en c ++ que lee cuatro oraciones y las muestra con «: nueva línea» al final 

CPP

// A simple C++ program to show working of getline
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
    string str;
    int t = 4;
    while (t--) {
        // Read a line from standard input in str
        getline(cin, str);
        cout << str << " : newline" << endl;
    }
    return 0;
}

Entrada de muestra:

 This
 is
 Geeks
 for

Como la salida esperada es:

This : newline
is  : newline
Geeks : newline
for : newline

La entrada y la salida anteriores se ven bien, puede haber problemas cuando la entrada tiene líneas en blanco en el medio. 

Entrada de muestra:

This

is 

Geeks

for

Producción:

This : newline
 : newline
is  : newline
 : newline

No imprime las últimas 3 líneas. La razón es que getline() lee hasta que se encuentra enter incluso si no se leen caracteres. Entonces, incluso si no hay nada en la tercera línea, getline() lo considera como una sola línea. Además, observe el problema en la segunda línea. El código se puede modificar para excluir tales líneas en blanco. Código modificado: 

CPP

// A simple C++ program that uses getline to read
// input with blank lines
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
    string str;
    int t = 4;
    while (t--) {
        getline(cin, str);
 
        // Keep reading a new line while there is
        // a blank line
        while (str.length() == 0)
            getline(cin, str);
 
        cout << str << " : newline" << endl;
    }
    return 0;
}

Entrada :

This

is 

Geeks

for

Salida :

This : newline
is  : newline
Geeks : newline
for : newline

Este artículo es una contribución de Sarin Nanda . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo en write.geeksforgeeks.org . Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *