Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
42
Добавлен:
16.02.2016
Размер:
210.94 Кб
Скачать

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;

}

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

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

// Сопоставление ввода строки с помощью 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;

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

// Ввод символа с помощью функции-элемента getline.

#include <iostream.h> const int SIZE = 80; main()

char buffer[SIZE];

cout « "Введите предложение:" « endl; cin.getline(buffer, SIZE};

cout « endl « "Введенное предложение:" « endl « buffer « endl;

return (0);

}

Другие функции-элементы класса istream (peek, putback, ignore)

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

Функция-элемент putback возвращает обратно в этот поток предыдущий символ, полученный из входного потока с помощью функции get. Функция полезна для приложений, которые просматривают входной поток с целью поиска записи, начинающейся с заданного символа. Когда этот символ введен, приложение возвращает его в поток, так что он может быть включен в те данные, которые будут вводиться.

Функция-элемент peek возвращает очередной символ из входного потока, но не удаляет его из потока.

Соседние файлы в папке ЛекцииКарасева