ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 12) онлайн
Ввод/вывод символов
Функции put() и get(), являющиеся методами ostream и istream соответственно,
могут быть использованы для ввода и вывода единичных символов. В программе
OCHAR строка выводится именно посимвольно.
Листинг 12.6. Программа OCHAR
// ochar.cpp
// Посимвольный файловый вывод
#include <fstream> // для файловых функций
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "Время – великий учитель, но, увы, "
"оно убивает своих учеников. Берлиоз";
ofstream outfile("TEST.TXT"); // Создать выходной файл
for(int j=0; j<str.size(); j++) // каждый символ
outfile.put( str[j] ); // записывать в файл
cout << "Файл записан\n";
return 0;
}
В этой программе объект ofstream создается так же, как в программе OLINE.
Длина объекта класса string по имени str находится с помощью метода size(),
а символы выводятся в цикле for функцией put(). Афоризм Гектора Берлиоза
(композитора XIX века) записывается в файл TEST.TXT. Считываем и выводим
этот файл с помощью программы ICHAR.
Листинг 12.7. Программа ICHAR
// ichar.cpp
// Посимвольный файловый ввод
#include <fstream> // для файловых функций
#include <iostream>
using namespace std;
int main()
{
char ch; // символ для считывания
ifstream infile("TEST.TXT"); // входной файл
while( infile ) // читать до EOF или ошибки
{
infile.get(ch); // считать символ
cout << ch; // и вывести его
}
cout << endl;
return 0;
}
В этой программе используется функция get(). Чтение производится до при-
знака окончания файла (или возникновения ошибки). Каждый прочитанный
символ выводится с помощью cout, поэтому на экран в результате работы про-
граммы будет выведен весь афоризм.
Есть и другой способ читать символы из файла — использовать функцию
rdbuf() (она является методом класса ios). Функция возвращает указатель на
объект класса streambuf (или filebuf), ассоциированный с потоковым объектом.
В этом объекте находится буфер символов, считанных из потока, поэтому мож-
но использовать указатель на него в качестве объекта данных.
Листинг 12.8. Программа ICHAR2
// ichar2.cpp
// Файловый ввод символов
#include <fstream> // для файловых функций
#include <iostream>
using namespace std;
int main()
{
ifstream infile("TEST.TXT"); // создать входной файл
cout << infile.rdbuf(); // передать его буфер в cout
cout << endl;
return 0;
}
Результат работы этой программы совпадает с ICHAR. Можно взять с полки
пирожок за написание самой короткой программы чтения из файла. Обратите
внимание на то, что функция rdbuf() сама знает, что следует прекратить работу
при достижении EOF.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48