C ++ iostream: использование cin & gt; & gt; Ошибки ввода var и getline (cin, var)

Я создаю простое консольное приложение на C ++, которое получает строки и символы от пользователя. Для простоты я хотел бы использовать строка а также голец типы данных для передачи ввода из CIN в.

Чтобы получить строковые входы, я использую GetLine метод:

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

Чтобы получить ввод символов, я использую cin >> var метод:

char var;
cin >> var;

Это прекрасно работает по большей части. Тем не менее, когда я ввожу строку с помощью GetLine, он игнорирует первый символ моей строки.

Можно ли использовать GetLine а также Кин >> без использования игнорировать, или метод, который я могу вызвать, чтобы убедиться, что мой первый персонаж не пропущен?

Это полный пример кода, где я использую оба GetLine а также Кин >>:

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

2

Решение

cin>>var;

только хватает var из буфера, он оставляет \n в буфере,
который затем сразу же захватывается getline

Итак, следующее — это нормально, (если я правильно понял вашу проблему)

cin>>var;
cin.ignore();     //Skip trailing '\n'
getline(cin, var);

Согласно вашему отредактированный сообщение

Вам не нужно использовать cin.ignore(); за geline

Это извлекает символы из буфера и сохраняет их в firstName или же (lastName) до знака разделителя здесь -newline ('\n').

5

Другие решения

ignore() не пропускает строку, она пропускает символ. Не могли бы вы выслать пример кода и уточнить необходимость cin.ignore()?

1

std::cin.ignore() будет игнорировать первый символ вашего ввода.

Для вашего случая используйте std::cin.ignore() после std::cin а потом getline() игнорировать символ новой строки как:

cin>>ch;
cin.ignore();  //to skip the newline character in the buffer
getline(cin,var);
1

Ты используешь std::isstream::ignore() до std::getline(), std::cin.ignore() извлечет первый символ из входной последовательности и отбросит его.

http://www.cplusplus.com/reference/istream/istream/ignore/

0
По вопросам рекламы [email protected]