нужна ваша помощь в получении пользовательского ввода.
Я хочу, чтобы пользователи печатали строку с пробелами.
я не могу использовать cin>>variable
поскольку промежуток между ними делает проблему ошибочной.
если я использую getline(cin,string_variable)
это работает правильно. но мне нужно напечатать дважды, чтобы заставить его работать неоправданно.
cout<<"Enter movie name";
getline(cin, mvName);
getline(cin, mvName);
Есть ли лучший способ получить пользовательский ввод, чем этот, или есть какие-то другие коды для ввода, а не дважды вводить getline? Просьба совета.
При переключении между форматированным вводом используется in >> value
и неформатированный ввод, например, используя std::getline(in, value)
вам нужно убедиться, что вы использовали любые пробелы, которые вас не интересуют. В вашем случае, вероятно, в буфере есть новая строка из предыдущего ввода. Предполагая, что вы не заинтересованы в создании пробелов, самый простой подход — использовать что-то вроде этого:
if (std::getline(std::cin >> std::ws, mvName)) {
process(mvName);
}
Кстати, вы всегда должны проверять, что ваш вклад был успешным.
У меня не было проблем с использованием:
char mvName[32];
cin.getline(mvName, 32);
И мне нужно было позвонить только один раз, снова без проблем.
Может быть, вы просто забыли добавить \n
в вашем быстром сообщении:
cout<<"Enter movie name:\n";
Но если вы хотите пропустить пустые строки — сделайте это:
// skip empty lines
while (cin >> mvName && mvName.empty());
// here mvName contains non empty string or it is empty because of error in reading
....
Поскольку вопрос не содержит символа новой строки, я подозреваю, что вы нажали клавишу Enter, чтобы перейти от "Enter movie name"
вопрос? Это поместит пустую строку в stdin
, который первым getline()
будет читать, а затем второй getline()
прочитал бы ваш введенный текст.
Чтобы отменить требование ввода начального символа новой строки, просто добавьте его в строковый литерал вопроса:
std::cout<< "Enter movie name:\n";
cout<<"Enter movie name";
getline(cin, mvName);
Работает отлично!
Может быть, вам пришлось использовать getline(cin, mvName);
дважды, потому что вы вводили какой-то символ в первый getline(cin, mvName);
как пробел, ввод и т. д.