Problema con getline() después de cin >>

La función getline() en C++ se usa para leer una string o una línea del flujo de entrada. La función getline() no ignora los espacios en blanco iniciales. Por lo tanto, se debe tener especial cuidado al usar getline() después de cin porque cin ignora los espacios en blanco y los deja en la transmisión como basura.

Programa 1:

A continuación se muestra el programa C++ para ilustrar lo mismo:

C++

// C++ program for the above problem
#include <iostream>
using namespace std;
  
// Driver Code
int main()
{
    int fav_no;
    string name;
  
    cout << "Type your favorite number: ";
  
    // The cin statement uses the
    // fav_no and leaves the \n
    // in the stream as garbage
    cin >> fav_no;
  
    cout << "Type your name : ";
  
    // getline() reads \n
    // and finish reading
    getline(cin, name);
  
    // In output only fav_no
    // will be displayed not
    // name
    cout << name
         << ", your favourite number is : "
         << fav_no;
  
    return 0;
}

Producción:

Explicación:

La solución para resolver el problema anterior es usar algo que extraiga todos los espacios en blanco después de cin . std::ws en C++ para hacer lo mismo. En realidad, esto se usa con el operador «>>» en los flujos de entrada.

Programa 2:

A continuación se muestra el programa C++ para ilustrar la solución para el problema anterior:

C++

// C++ program for the above solution
#include <iostream>
using namespace std;
  
// Driver Code
int main()
{
    int fav_no;
    string name;
    cout << "Type your favourite number: ";
    cin >> fav_no;
  
    cout << "Type your name: ";
  
    // Usage of std::ws will extract
    // all  the whitespace character
    getline(cin >> ws, name);
  
    cout << name
         << ", your favourite number is : "
         << fav_no;
    return 0;
}

Producción:

Publicación traducida automáticamente

Artículo escrito por rogetsgeneral7 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 *