Скачиваний:
46
Добавлен:
15.09.2014
Размер:
877.06 Кб
Скачать

11.4.2. Функции-элементы get и getline

Функция-элемент get без аргументов вводит одиночный символ из ука­занного потока (даже, если это символ разделитель) и возвращает этот символ в качестве значения вызова функции. Этот вариант функции get возвращает EOF, когда в потоке встречается признак конца файла.

642 Глава 11

Программа на рис. 11.12 демонстрирует использование функций-элемен­тов eof и get для ввода из входного потока cin и использование функции-элемента put для вывода в выходной поток cout. Сначала программа печатает значение cin.eof( ), т.е. 0 (ложь), чтобы показать, что конец файла в cin не достигнут. Пользователь вводит строку текста, завершающуюся признаком конца файла (<ctrl>-z с последующим <return> в ШМ-совместимых опера­ционных система, <ctrl>-d — на компьютерах с ОС UNIX и Macintosh). Программа читает каждый символ и выводит его в cout, используя функ­цию-элемент print. Когда появляется признак конца файла, цикл while за­вершается и снова печатается значение cin.eof( ), равное теперь 1 (истина), чтобы показать, что в cin достигнут конец файла. Заметим, что программа использует вариант функции-элемента get класса istream, который не при­нимает никаких аргументов и возвращает введенный символ.

// figll_12.cpp

// Использование функций-элементов get, put и eof.

#include <iostream.h>

main () {

int с;

cout « "До ввода cin.eof() равняется " « cin.eof() « endl « "Введите предложение, завершающееся признаком конца файла:" « endl;

while ( ( с = cin.get() ) != EOF) cout.put(с);

cout « endl « "EOF в этой системе равняется " « с « endl; cout « "После ввода cin.eof() равняется " « cin.eof()

« endl; return 0;

}

До ввода cin.eof() равняется 0

Введите предложение, завершающееся признаком конца файла:

Проверка функций-элементов get и put^Z

Проверка функций-элементов get и put

EOF в этой системе равняется -1

После ввода cin.eof() равняется 1

Рис. 11.12. Использование функций-элементов get, put и eof

Другой вариант функции-элемента get с символьным аргументом вводит очередной символ из входного потока (даже, если это символ разделитель) и сохраняет его в символьном аргументе. Этот вариант функции get возвра­щает ложь, когда встречается признак конца файла; в остальных случаях этот вариант функции get возвращает ссылку на тот объект класса istream, для которого вызывалась функция-элемент get.

Третий вариант функции-элемента get принимает три параметра: сим­вольный массив, максимальное число символов и ограничитель (по умолча­нию значение '\n'). Этот вариант читает символы из входного потока до тех пор, пока не достигается число символов, на 1 меньше указанного макси-

Потоки ввода-вывода в С++ 643

мального числа, или пока не считывается ограничитель. Затем для завер­шения введенной строки в символьный массив, используемый в качестве буфера программы, помещается нулевой символ. Ограничитель в символьный массив не помещается, а остается во входном потоке (он будет следующим считываемым символом). Таким образом, результатом второго подряд исполь­зования функции get явится пустая строка, если только ограничитель не удалить из входного потока. Программа на рис. 11.13 сравнивает ввод, ис­пользующий для cin операцию взять из потока (которая читает символы до тех пор, пока не встречается символ разделитель), и ввод с помощью cin.get. Обратите внимание, что в обращении к cin.get не задается символ ограни­читель, так что по умолчанию используется '\n'.

// figll_13. cpp

// Сопоставление ввода строки с помощью cin and cin.get.

#include <iostream.h>

const int SIZE = 80;

main() {

char bufferl[SIZE], buffer2[SIZE];

cout « "Введите предложение:" « endl; cin » bufferl;

cout « endl « "Из cin прочитана строка:" <<endl « bufferK< endl <<endl;

cin.get(buffer2, SIZE);

cout « "Строка, прочитанная с помощью cin.get:" « endl « buffer2 « endl;

return 0;

Введите предложение:

Сравнение ввода строки с помощью cin и cin.get

Из cin прочитана строка: Сравнение

j,gj^ Строка, прочитанная с помощью cin. get: ввод строки с помощью cin и cin.get

Рис. 11.13. Сравнение ввода строки из cin с помощью операции взять из потока и с помощью

cin.get

Функция-элемент getline действует подобно третьему варианту функ­ции-элемента get и помещает нулевой символ после строки в символьном массиве. Но в отличие от get функция getline удаляет символ ограничитель из потока (т.е. читает этот символ и отбрасывает его); этот символ не со­храняется в символьном массиве. Программа, приведенная на рис. 11.14, демонстрирует использование функции-элемента getline для ввода строки текста.