Міністерство освіти і науки
Національний університет “Львівська політехніка”
Кафедра ЕОМ
/
Звіт
з лабораторної роботи № 3
з дисципліни: “Об’єктно-орієнтоване програмування”
на тему: “Потоковий ввід-вивід”
Мета лабораторної роботи
Навчитись користуватися засобами стандартного вводу-виводу С++.
Теоретичні відомості
Файловий ввід-вивід
Для виконання операцій з файлами передбачено три класи: іfstream, ofstream і fstream. Ці класи є похідними від класів іstream, ostream і іostream. Всі функціональні можливості (перевантажені операції << та >> для вбудованих типів, функції і прапорці форматування, маніпулятори й ін.), що застосовуються до стандартного вводу та виводу, можуть застосовуватися і до файлів. Існує деяка відмінність між використанням стандартних та файлових потоків. Стандартні потоки можуть використовуватися відразу після запуску програми, тоді як файловий потік спочатку слід зв'язати з файлом. Для реалізації файлового вводу-виводу потрібно підключити заголовочний файл fstream.h.
Відкрити файл для вводу чи виводу можна наступним чином:
// Для виводу
ofstream outfile;
outfile.open("File.txt");
або
ofstream outfile("File.txt");
або
fstream outfile("File.txt ",ios::out);
// Для вводу
ifstream infile;
infile.open("File.txt");
або
ifstream infile("File.txt");
або
fstream infile("File.txt ",ios::in);
Режими відкриття файлів та їхнє призначення.
Режим відкриття
Призначення
іos::іn
Відкрити файл для читання
іos::out
Відкрити файл для запису
іos::ate
Відкрити файл для додавання в кінець
іos::app
Відкрити файл для додавання в кінець
іos::trunc
Усікти файл, тобто видалити його вміст
іos::bіnary
Відкрити файл у двійковому режимі
Режими відкриття файлу являють собою бітові маски, тому можна задавати два або більш режими, поєднуючи їх побітовою операцією АБО. Слід звернути увагу, що по замовчуванню режим відкриття файлу відповідає типові файлового потоку. У потоці вводу або виводу прапорець режиму завжди встановлений неявно.
Між режимами відкриття файлу іos::ate та іos::app існує певна відмінність. Якщо файл відкривається в режимі додавання, весь вивід у файл буде здійснюватися в позицію, що починається з поточного кінця файлу, безвідносно до операцій позиціонування у файлі. У режимі відкриття іos::ate (від англійського "at end") можна змінити позицію виводу у файл і здійснювати запис, починаючи з неї. Файли, які відкриваються для виводу, створюються, якщо вони ще не існують.
Якщо при відкритті файлу не зазначений режим іos::bіnary, файл відкривається в текстовому режимі.
Якщо відкриття файлу завершилося невдачею, об'єкт, що відповідає потокові, буде повертати нуль. Перевірити успішність відкриття файлу можна також за допомогою функції-члена іs_open(). Дана функція повертає 1, якщо потік вдалося зв'язати з відкритим файлом.
Для перевірки, чи досягнутий кінець файлу, можна використовувати функцію eof(). Завершивши операції вводу-виводу, необхідно закрити файл, викликавши функцію-член close().
Індивідуальне завдання
Написати програму, яка буде додавати у текстовий файл введену з клавіатури інформацію (згідно варіанту). Слід передбачити можливість вибору користувачем режиму роботи: додавання чи відображення даних. Забезпечити зберігання даних у файлі у вигляді структурованої таблиці, для цього слід використовувати засоби форматування.
4. З клавіатури вводиться ім’я та день народження (день та місяць).
Код програми
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
setlocale(LC_CTYPE, "Ukrainian");
for (;;)
{
unsigned int n;
cout << "1 - Ввести iм'я i день народження" << endl
<< "2 - Прочитати файл" << endl
<< "3 - Очистити файл" << endl
<< "0 - Вихiд з програми" << endl
<< "Ваш вибiр: ";
cin >> n;
if (n == 1) // Ввести iм'я i день народження
{
char Name[16];
unsigned int Day, Month;
cout << "Введiть iм'я:" << endl;
cin >> Name;
cout << "Введiть день мiсяця:" << endl;
cin >> Day;
cout << "Введiть номер мiсяця:" << endl;
cin >> Month;
fstream TextFile("Text.txt", ios::app);
if (!TextFile)
{
cout << "Помилка вiдкриття файлу" << endl << endl;
system("pause");
return -1;
}
TextFile.width(16);
TextFile.setf(ios::left);
if (Day < 10)
TextFile << Name << "0" << Day;
else
TextFile << Name << Day;
if (Month < 10)
TextFile << ".0" << Month << endl;
else
TextFile << "." << Month << endl;
TextFile.close();
cout << endl;
system("pause");
}
else if (n == 2) // Прочитати файл
{
fstream TextFile("Text.txt", ios::in);
if (!TextFile)
{
cout << "Помилка вiдкриття файлу" << endl << endl;
system("pause");
return -1;
}
char str[16];
TextFile >> str;
if (TextFile.eof())
cout << "Файл порожнiй" << endl << endl;
else
TextFile.seekg(0, ios::beg);
while (!TextFile.eof())
{
cout.width(16);
cout.setf(ios::left);
TextFile >> str;
cout << str;
TextFile >> str;
cout << str << endl;
}
system("pause");
TextFile.close();
}
else if (n == 3) // Очистити файл
{
fstream TextFile("Text.txt", ios::out);
if (!TextFile)
{
cout << "Помилка вiдкриття файлу" << endl << endl;
system("pause");
return -1;
}
TextFile.close();
cout << "Файл очищено" << endl << endl;
system("pause");
}
else if (n == 0) // Вихiд з програми
return 0;
system("cls");
}
}
Результат виконання програми
/
/
/
Висновок
Я навчився користуватися засобами стандартного вводу-виводу С++ та написав програму, яка працює з текстовим файлом.