Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Звіт:
«Лабораторна робота № 3
потоковий ввід-вивід»
Підготовив:
Ст.гр. КІ-12
Білецький М.М.
Перевірив:
Цигилик Л.О.
Львів 2008
Мета роботи: Навчитись користуватися засобами стандартного вводу-виводу С++.
Короткі теоретичні відомості
Потоки вводу-виводу в С++
Система вводу-виводу в стандартній бібліотеці С++ реалізована у вигляді потоків. Потік вводу-виводу – це логічний пристрій, який приймає та видає інформацію користувача. Кожен потік зв’язаний з фізичним пристроєм (клавіатура, монітор) або з файлом. Бібліотека потоків iostream реалізована як ієрархія класів та забезпечує широкі можливості для виконання операцій вводу-виводу. Далі наведено призначення деяких класів потокового вводу-виводу:
istream – підтримує операції по вводу;
ostream – підтримує операції по виводу;
iostream – підтримує операції по вводу-виводу;
іfstream – підтримує операції по вводу з файлу;
ofstream – підтримує операції по виводу у файл;
fstream – підтримує операції з файлами по вводу-виводу.
Стандартні потоки
Коли запускається програма на С++, автоматично створюються чотири стандартних потоки.
Табл..1
Потік
Призначення
Пристрій по замовчуванню
cin
Стандартний ввід
Клавіатура
cout
Стандартний вивід
Монітор
cerr
Стандартний вивід повідомлень про помилки
Монітор
clog
Стандартний вивід повідомлень про помилки (буферизований)
Монітор
Щоб мати можливість використовувати стандартні потоки необхідно підключити заголовочний файл iostream.h.
Об’єкт стандартного потоку вводу cin класу istream, зв’язаний із стандартним пристроєм вводу, за звичай клавіатурою. Об’єкт стандартного потоку виводу cout класу ostream, зв’язаний із стандартним пристроєм виводу, за звичай монітором. Об’єкт cerr класу ostream, зв’язаний із стандартним пристроєм виводу повідомлень про помилки. Потоки даних, що виводяться, для об’єкту cerr являються небуферизованими. Тобто кожна операція помістити в cerr приводить до миттєвої появи повідомлень про помилки. Об’єкт clog класу ostream, зв’язаний із стандартним пристроєм виводу повідомлень про помилки. Потоки даних, що виводяться, для об’єкту clog являються буферизованими. Тобто кожна операція помістити в clog може привести до того, що вивід буде зберігатися в буфері до тих пір, поки буфер повністю не заповниться або ж поки вмістиме буферу не буде виведене примусово.
Вивід в потік виконується за допомогою операції «помістити в потік», а саме перевантаженої операції <<. Дана операція перевантажена для виводу елементів даних стандартних типів, для виводу рядків та значень вказівників.
Операція << повертає посилання на об'єкт типу ostream, для якого вона викликана. Це дозволяє будувати ланцюжок викликів операції «помістити в потік», що виконуються зліва направо.
іnt і = 5;
double d = 2.08;
cout << "і = " << і << ", d = " << d << '\n';
Ці оператори приведуть до виведення на екран наступного рядка:
і = 5, d = 2.08
Ввід потоку виконується за допомогою операції «взяти із потоку», а саме перевантаженої операції >>. Дана операція зазвичай ігнорує у вхідному потоці символи розділювачі та пробільні символи. Операція «взяти із потоку» повертає нульове значення (false), якщо зустрічає в потоці признак кінця файлу або виникає помилка при спробі читання із потоку.
Написати програму, яка буде додавати у текстовий файл введену з клавіатури інформацію (згідно варіанту). Слід передбачити можливість вибору користувачем режиму роботи: додавання чи відображення даних. Забезпечити зберігання даних у файлі у вигляді структурованої таблиці, для цього слід використовувати засоби форматування.
З клавіатури вводиться ціле число, у файл записується його 10-ткове, 16-ткове та 8-кове значення
#include <conio.h>
#include <fstream.h>
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
int main (void){
int chuslo,i;
char n[128],m;
cout<<"vvedit' komandu(w or r)"<<endl;
cin>>m;
if(m=='w'){
cout<<"chuslo = "<<endl;
cin>>chuslo;
ofstream ofile("Test.txt",ios::out);
if(!ofile){
cout<<"file not open"<<endl;
}
ofile<<"ten eight sixtin "
<<endl<<dec<<setw(0)<<chuslo<<oct<<setw(10)<<chuslo
<<setiosflags(ios::hex|ios::uppercase)
<<setw(10)<<chuslo<<"\n";
ofile.close();
}
else if(m=='r'){
ifstream ifile("Test.txt",ios::in);
if(!ifile){
cout<<"file not open"<<endl;
}
for( i=0;i<3;i++){
ifile>>n;
cout<<n<<" ";
}
cout<<endl;
for( i=0;i<3;i++){
ifile>>n;
cout<<n<<" ";
}
cout<<endl;
}
else if((m!='w') && (m!='r'))
cout<<"fattal error"<<endl;
getch();
return 0;
}
Результати:
ВИСНОВОК: Я навчився користуватися засобами стандартного вводу-виводу С++.