При считывании потока из командной строки в переменную с помощью std::getline
не дает ввести данные, перескакивает. Как можно считать строку с пробелами в переменную избежав моей проблемы в std::getline
std::string fio;
std::string citi;
int id;
std::cout << "Введите id(число) абонента: ";
std::cin >> id;
std::cout << "Введите ФИО абонента: ";
std::getline(std::cin, fio, '\n');
std::cout <<"Введите город абонента: ";
std::cin >> citi;
ВЫВОД:
добавление абонента в группу пользователей
Введите id(число) абонента: 12
Введите ФИО абонента: Введите город абонента:
Вставьте строку
#include <limits>
//...
std::cout << "Введите id(число) абонента: ";
std::cin >> id;
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
std::cout << "Введите ФИО абонента: ";
std::getline(std::cin, fio, '\n');
Проблема заключается в том, что в буфере ввода после использования оператора operator >>
остается символ новой строки, соответствующий нажатой клавише Enter. А функция std;:getline
читает буфер, пока не встретится этот символ. Поэтому если его не удалить, то будет считана пустая строка.
Потому что после ввода числа в буфере остается символ '\n'
. Он и считывается при вводе строки как пустая строка. Вам надо сбросить содержимое буфера перед вводом строки:
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
При неверном вводе числа нужно еще сбросить флаг состояния ошибки cin.clear()
.
(std::cin >> id).get();
Нужно проигнорировать символ переноса строки, потому что он остается и тогда getline читает пока не встретит этот символ и в итоге считывается пустая строка.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть большой sql-запрос (почти на 1500 строк), доставшийся по наследству, но не функционирующий правильноНужно отдебажить
Поставил на Ubuntu сервер MySQL, создал БД, при создании указал кодировку utf-8: