Проблема с getline() после cin >>

Опубликовано: 2 Сентября, 2022

Функция getline() в C++ используется для чтения строки или строки из входного потока. Функция getline() не игнорирует начальные пробельные символы. Поэтому следует проявлять особую осторожность при использовании getline() после cin, потому что cin игнорирует символы пробела и оставляет их в потоке как мусор.

Программа 1:

Ниже приведена программа на C++, иллюстрирующая то же самое:

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
    // in the stream as garbage
    cin >> fav_no;
  
    cout << "Type your name : ";
  
    // getline() reads
    // 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;
}

Выход:

Объяснение:

Решение вышеуказанной проблемы состоит в том, чтобы использовать что-то, что извлекает все символы пробела после cin . std::ws в C++, чтобы сделать то же самое. На самом деле это используется с оператором «>>» для входных потоков.

Программа 2:

Ниже приведена программа на C++, иллюстрирующая решение вышеуказанной проблемы:

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;
}

Выход: