- •Обзорные лекции по курсу
- •1.Потоки
- •1.1. Заголовочные файлы библиотеки потоков iostream
- •1.2. Классы и объекты потоков ввода-вывода
- •2.Вывод потоков
- •Int main()
- •3. Ввод потоков
- •Int X, у;
- •Int с;
- •Сохранение типов данных при вводе-выводе
- •4. Неформатированный ввод-вывод с использованием read, gcount и write
- •5. Манипуляторы потоков
- •Манипуляторы, определяемые пользователем
- •Упражнения для самопроверки
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 возвращает очередной символ из входного потока, но не удаляет его из потока.