Ввід-вивід символів
Функції put() та get(), що є методами ostream та istream відповідно, можуть бути використані для вводу-виводу одиничних символів. У програмі 26.5 рядки виводяться посимвольно.
//Посимвольний файловий вивід
#include<fstream>
#include<iostream>
#include<string>
#include<conio>
using namespace std;
int main()
{
string str="11111 111111 "
"22222 222222 ";
ofstream outfile("test.txt");
for(int j=0;j<str.size();j++)
outfile.put(str[j]);
cout<<"File zapysanyj\n";
getch();
return 0;
}
Програма 26.5
В цій програмі об’єкт ofstream створюється так само, як в програмі 26.4. Довжина об’єкту класу string на ім’я str визначається за допомогою методу size(), а символи виводяться в циклі for функцією put(). Результат записується в файл test.txt. Зчитуємо і виводимо цей файл за допомогою програми 26.5а.
//Посимвольний файловий вивід
#include<fstream>
#include<iostream>
#include<string>
#include<conio>
using namespace std;
int main()
{
char ch;
ifstream infile("test.txt");
while(infile) //читати до кінця чи помилки
{infile.get(ch);//зчитати символ
cout<<ch; //вивести його
}
cout << endl;
getch();
return 0;
}
Програма 26.5а
В цій програмі використовується функція get(). Читання проходить до ознаки закінчення файлу (чи виникнення помилки). Кожен прочитаний символ виводиться в потік cout, тому на екран в результаті роботи програми буде виведений весь вміст файлу.
Є й інший спосіб читати символи з файлу – використовувати функцію rdbuf(), що є методом класу ios. Функція повертає вказівник на об’єкт класу streambuf (чи filebuf), асоційований з потоковим об’єктом. В цьому об’єкті знаходиться буфер символів, зчитаних з потоку, тому можна використовувати вказівник на нього в якості об’єкту даних.
Описаний спосіб реалізується в програмі 26.5b
//Посимвольний файловий вивід
#include<fstream>
#include<iostream>
#include<string>
#include<conio>
using namespace std;
int main()
{
char ch;
ifstream infile(“test.txt”);//створити вхідний файл
cout<<infile.rdbuf();//передати його буфер в cout
cout << endl;
getch();
return 0;
}
Програма 26.5b
Результат роботи цієї програми співпадає з попереднім. Зверніть увагу, що функція rdbuf() сама знає, що слід припинити програму при досягненні eof.
Дата добавления: 2015-08-26; просмотров: 584;