Я создаю простое консольное приложение на 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);
}
cin>>var;
только хватает var
из буфера, он оставляет \n
в буфере,
который затем сразу же захватывается getline
Итак, следующее — это нормально, (если я правильно понял вашу проблему)
cin>>var;
cin.ignore(); //Skip trailing '\n'
getline(cin, var);
Согласно вашему отредактированный сообщение
Вам не нужно использовать cin.ignore();
за geline
Это извлекает символы из буфера и сохраняет их в firstName
или же (lastName
) до знака разделителя здесь -newline ('\n'
).
ignore()
не пропускает строку, она пропускает символ. Не могли бы вы выслать пример кода и уточнить необходимость cin.ignore()
?
std::cin.ignore()
будет игнорировать первый символ вашего ввода.
Для вашего случая используйте std::cin.ignore()
после std::cin
а потом getline()
игнорировать символ новой строки как:
cin>>ch;
cin.ignore(); //to skip the newline character in the buffer
getline(cin,var);
Ты используешь std::isstream::ignore()
до std::getline()
, std::cin.ignore()
извлечет первый символ из входной последовательности и отбросит его.