Не коректное чтение значения из std::cin в std::string

301
09 февраля 2017, 00:45

При считывании потока из командной строки в переменную с помощью 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
Введите ФИО абонента: Введите город абонента:
Answer 1

Вставьте строку

#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 читает буфер, пока не встретится этот символ. Поэтому если его не удалить, то будет считана пустая строка.

Answer 2

Потому что после ввода числа в буфере остается символ '\n'. Он и считывается при вводе строки как пустая строка. Вам надо сбросить содержимое буфера перед вводом строки:

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

При неверном вводе числа нужно еще сбросить флаг состояния ошибки cin.clear().

Answer 3
(std::cin >> id).get();

Нужно проигнорировать символ переноса строки, потому что он остается и тогда getline читает пока не встретит этот символ и в итоге считывается пустая строка.

READ ALSO
Найти стороны треугольника [требует правки]

Найти стороны треугольника [требует правки]

Даётся n и массив с размером nВсе числа в размешку

332
Как отдебажить большой sql-запрос?

Как отдебажить большой sql-запрос?

Есть большой sql-запрос (почти на 1500 строк), доставшийся по наследству, но не функционирующий правильноНужно отдебажить

344
Ubuntu, MySQL - проблемы с кодировкой

Ubuntu, MySQL - проблемы с кодировкой

Поставил на Ubuntu сервер MySQL, создал БД, при создании указал кодировку utf-8:

383