C ++ iostream: Używanie błędów wejściowych cin >> var i getline (cin, var)

Tworzę prostą aplikację konsolową w C ++, która pobiera ciągi znaków i znaki wejściowe od użytkownika. Aby to było proste, chciałbym użyćstrunowy izwęglać typy danych do przekazania danych wejściowych z cin do.

Aby uzyskać wejścia ciągów, używamgetline metoda:

string var;
cin.ignore(); //I used ignore() because it prevents skipping a line after using cin >> var
getline(cin, var);

Aby uzyskać wejścia znakowe, używamcin >> var metoda:

char var;
cin >> var;

W większości przypadków działa to dobrze. Jednak gdy wprowadzam ciąg używającgetline, ignoruje pierwszy znak mojego ciągu.

Czy możliwe jest użyciegetline icin >> bez konieczności używaniaignorowaćlub metodę, którą mogę wywołać, aby upewnić się, że moja pierwsza postać nie zostanie pominięta?

To jest pełna próbka kodu, w której używam obugetline icin >>:

string firstName;
string lastName;
char gender = 'A';

cout << "First Name: ";
cin.ignore();
getline(cin, firstName);


cout << "Last Name: ";
cin.ignore();
getline(cin, lastName);

while(genderChar != 'M' && genderChar != 'F')
{
    cout << "Gender (M/F): ";
    cin >> genderChar;
    genderChar = toupper(genderChar);
}

questionAnswers(4)

yourAnswerToTheQuestion