Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра СКС
Звіт
з лабораторної роботи № 3
з дисципліни: “ООП”
на тему: “ Потоковий ввід-вивід ”
Львів 2009
МЕТА РОБОТИ: ПОЗНАЙОМИТИСЯ ІЗ ПОТОКОВИМ ВВОДОМ-ВИВОДОМ.
Короткі теоретичні відомості
Потоки вводу-виводу в С++
Система вводу-виводу в стандартній бібліотеці С++ реалізована у вигляді потоків. Потік вводу-виводу – це логічний пристрій, який приймає та видає інформацію користувача. Кожен потік зв’язаний з фізичним пристроєм (клавіатура, монітор) або з файлом. Бібліотека потоків iostream реалізована як ієрархія класів та забезпечує широкі можливості для виконання операцій вводу-виводу. Далі наведено призначення деяких класів потокового вводу-виводу:
istream – підтримує операції по вводу;
ostream – підтримує операції по виводу;
iostream – підтримує операції по вводу-виводу;
іfstream – підтримує операції по вводу з файлу;
ofstream – підтримує операції по виводу у файл;
fstream – підтримує операції з файлами по вводу-виводу.
Стандартні потоки
Коли запускається програма на С++, автоматично створюються чотири стандартних потоки.
Табл..1
Потік
Призначення
Пристрій по замовчуванню
cin
Стандартний ввід
Клавіатура
cout
Стандартний вивід
Монітор
cerr
Стандартний вивід повідомлень про помилки
Монітор
clog
Стандартний вивід повідомлень про помилки (буферизований)
Монітор
Засоби форматування потоку
Табл..2
Функція-член
Призначення
width(int wide)
Дозволяє задати мінімальну ширину поля для виведення значення. При вводі задає максимальне число символів, що читаються. Якщо значення, що виводиться, має менше символів, чим задана ширина поля, то воно доповнюється символами-заповнювачами до заданої ширини (за замовчуванням - пробілами). Якщо ж значення, що виводиться має більше символів, чим ширина відведеного йому поля, то поле буде розширене.
precision(int prec)
Дозволяє прочитати або встановити точність (число цифр після десяткової крапки), з якою виводяться числа з плаваючою крапкою. По замовчуванню числа з плаваючою крапкою виводяться з точністю, рівною шести цифрам.
fill(char ch)
Дозволяє прочитати або встановити символ-заповнювач.
З кожним потоком зв'язаний набір прапорців, що керують форматуванням потоку. Вони являють собою бітові маски. Прапорці форматування і їхнє призначення приведені в табл.3. Встановити значення одного або декількох прапорців можна за допомогою функції-члену setf(long mask).
Табл..3
Прапорець
Призначення
dec
Встановлюється десяткова система числення
hex
Встановлюється шістнадцяткова система числення
oct
Встановлюється вісімкова система числення
scientific
Числа з плаваючою крапкою, виводяться в науковому записі (тобто n.хххЕуу)
showbase
Виводиться основа системи числення у виді префікса до цілого числового значення (наприклад, число 1FE виводиться як 0x1FE)
showpos
При виводі позитивних числових значень виводиться знак плюс
uppercase
Замінюються визначені символи нижнього регістра на символи верхнього регістра (символ "е" при виведенні чисел в науковому записі – на "Е" і символ "х" при виведенні чисел в шістнадцятковій системі – на "X")
left
Дані при виведенні вирівнюються по лівому краю поля виводу
right
Дані при виведенні вирівнюються по правому краю поля виводу
internal
Додаються символи-заповнювачі між усіма цифрами і знаками числа для заповнення поля виводу
skipws
Ведучі символи-заповнювачі (знаки пробілу, табуляції і переходу на новий рядок) відкидаються
Табл..4
Маніпулятор
Призначення
endl
Виводить символ нового рядка та очищує потік
flush
Видає вмістиме буфера потоку у пристрій
dec
Встановлює десяткову систему числення
hex
Встановлює шістнадцяткову систему числення
oct
Встановлює вісімкову систему числення
setbase (int base)
Задає основу системи числення для цілих чисел (8,10,16)
setfill (int c)
Встановлює символ-заповнювач
setprecision (int n)
Встановлює точність чисел з плаваючою крапкою
setw(int n)
Встановлює мінімальну ширину поля виводу
setiosflags (iosbase::long mask)
Встановлює ios-прапорці згідно з mask
Файловий ввід-вивід
Для виконання операцій з файлами передбачено три класи: іfstream, ofstream і fstream. Ці класи є похідними від класів іstream, ostream і іostream. Всі функціональні можливості (перевантажені операції << та >> для вбудованих типів, функції і прапорці форматування, маніпулятори й ін.), що застосовуються до стандартного вводу та виводу, можуть застосовуватися і до файлів. Існує деяка відмінність між використанням стандартних та файлових потоків. Стандартні потоки можуть використовуватися відразу після запуску програми, тоді як файловий потік спочатку слід зв'язати з файлом. Для реалізації файлового вводу-виводу потрібно підключити заголовочний файл fstream.h.
Режими відкриття файлів та їхнє призначення наведені у табл.5.
Табл..5
Режим відкриття
Призначення
іos::іn
Відкрити файл для читання
іos::out
Відкрити файл для запису
іos::ate
Відкрити файл для додавання в кінець
іos::app
Відкрити файл для додавання в кінець
іos::trunc
Усікти файл, тобто видалити його вміст
іos::bіnary
Відкрити файл у двійковому режимі
Завдання
З клавіатури вводиться назва товару та його ціна
Виконання роботи
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
using namespace std;
int main(){
int f;
string tovar;
double cina;
do {
cout << "add to file - 1\n" << "view file - 2\n";
f=_getch();
} while ((f!=49)&&(f!=50));
if(f==50){
ifstream ifile("sklad.txt",ios::in);
if (!ifile){
cout << "file not found.\n";
return -1;
}
cout << "tovar " << " cina" << endl;
while (!ifile.eof()){
tovar = ""; cina = 0;
ifile >> tovar;
cout.width (15);
cout.setf (ios::left);
if (tovar==""){continue;};
cout << tovar;
ifile >> cina;
cout.width (5);
cout << cina << endl;
}
ifile.close ();
}else{
ofstream ofile("sklad.txt",ios::app);
if (!ofile){
cout << "file not open.\n";
return -1;
}
cout << "Tovar: ";
cin >> tovar;
cout << "Cina: ";
cin >> cina;
ofile.width (15);
ofile.setf (ios::left);
ofile << tovar;
ofile.width (5);
ofile << cina << endl;
ofile.close ();
}
return 1;
}
Результати роботи програми
Tovar cina
Fhsjdhf 56
Dsadas 67
Hfjdhfjk 3
Висновок: я познайомився з потоковим вводом-виводом і виконав свій варіант завдання.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!