Прототип метода:
istream& ignore(streamsize count = 1, int delim = EOF);
Поэтому мы можем пропустить вообще все символы потока. Наиболее часто метод используется для пропуска всех символов до конца строки:
cin.ignore(numeric_limits<std::streamsize>::max(),'\n');
ПРИМЕЧАНИЕ
Класс-шаблон numeric_limits (см. п. п. 18.2.1 в [1]) включает многообразные числовые пределы, зависящие от аппаратной платформы.
Как видим, метод get О не слишком удобен. Функция-метод getlineO работает при вводе строк аналогично методу ge t (), но еще и удаляет из входного потока тот самый символ-завершитель строки (тоже символ ' \ п' по умолчанию), так что ignoreO вызывать нет необходимости. Прототипы метода следующие:
istream& getline(char* str, streamsize count);
istream& getline(char* str, streamsize count, char delim);
Наши примеры при использовании метода getlineO выглядят так:
cin.getline(s,50); cin.getline(s,50,'.');
Последовательность символов, естественно, можно вводить и методом read(), но мы этого делать не будем, так как это не слишком удобно — метод никак не обрабатывает конец строки, поэтому ошибку совершить очень легко.
Кстати, посчитать количество реально введенных символов позволяет такой хороший метод, как gcountO (см. п. п. 27.1.6.3'в [1]):
const int lineSize = 250; char Buf[lineSize];
// читается до конца строки, но не более 250 символов cin.getline(Buf, lineSize);
int readSymbol = cin.gcount(); // сколько символов фактически прочитано
Методы get () и getlineO входного потока не предназначены для ввода строк типа string, так как в качестве первого параметра принимают указатель на символ. В библиотеке <st гi ng> имеется собственная функция getl i ne () (см. п. п. 21.3.7.9 в [1]), которая позволяет вводить строки с символами-разделителями. Вызывать функцию надо так:
string s;
getline(cin, s); // -- ввод из стандартного потока
В качестве первого параметра эта функция принимает поток. Очевидно, это сделано для большей общности, так как на месте первого параметра может стоять не только стандартный поток cin, а, например, файловый поток.
Эта функция (вернее, шаблон функции) перегружена и может иметь третий параметр, представляющий собой ограничитель строки — аналогично методу get I i ne () из библиотеки <iostream>.
Поэтому вводить строку можно и так:
string s;
getline(cin, s,'.'); // -- ввод из стандартного потока
Точка является завершающим символом строки (однако нажимать клавишу Enter все равно необходимо), она не включается в строку, и в переменную s попадут символы до точки. Например, если мы наберем на клавиатуре строку «привет от строки, продолжение строки.», в переменную s попадет строка «привет от строки».
Как видите, поведение этой функции совершенно аналогично поведению одноименного метода из библиотеки <iostream>.
ВНИМАНИЕ
Символы кириллицы, вводимые с клавиатуры в строковые переменные, затем правильно выводятся на экран в консольное окно — никаких специальных действий для перекодировки выполнять не требуется. |