На этом сайте есть несколько вопросов, ссылающихся на getline
, очевидно, что в буфере есть оставшиеся символы новой строки, которые необходимо очистить, предположительно с cin.ignore()
. Я пробовал так много вариаций этого и ничего не работает, все, что я пытаюсь сделать, это простой ввод в консоль, а cin >> string
не является вариантом, потому что строка может иметь пробелы.getline (cin, string) не работает EVEN WITH cin.ignore()
Вот мой код.
void prompt(std::string * str)
{
cout << "> ";
cin.sync();
cin.get();
cin.ignore(256, '\r');
cin.ignore(256, '\n');
cin.ignore();
cin.ignore();
std::string tmp;
getline(cin, tmp);
cin.sync();
cin.get();
cin.ignore(256, '\r');
cin.ignore(256, '\n');
*str = tmp;
}
Как вы можете видеть, я пробовал всевозможные вещи. Он по-прежнему пропускает getline(cin,tmp)
и, как представляется, устанавливает str
в пустую строку. Пожалуйста помоги. Спасибо за ваше время.
Пожалуйста, не помечать вопросы C++ с C тег –
Попробуйте удалить все '' игнорирующие) команды (и использовать 'станд :: GetLine (станд :: CIN> > std :: ws, tmp); вместо этого. '>> std :: ws' пропускает все пробелы (включая конец строк). – Galik
Я не вижу ошибок. Do 'if (! Cin) {cout <<« Что-то установило failbit ». << endl; } ' –