Professional Documents
Culture Documents
06 - Tokovi
06 - Tokovi
06 - Tokovi
Banja Luka
Programski jezici 1
TOKOVI (Streams)
Goran Banjac
goran.banjac@etfbl.net
11/17/2018
Tokovi
Sadržaj
Koncept tokova
Funkcije za standardni U/I
U/I manipulatori
Rad sa fajlovima
Koncept tokova
Sav ulaz/izlaz podataka u C++ predstavlja ios
tok (stream) – dugi niz bajtova.
Tokovi se koriste bez obzira na vrstu ili prirodu
istream ostream
periferala (monitor, disk, štampač, ...).
Postoje dva nivoa korištenja U/I tokova:
low level – neformatirani U/I ifstream iostream ofstream
high level – formatirani U/I
Primer:
#include <iostream>
using namespace std;
int main ()
{
char i, p;
cout << "Ime i prezime: ";
i=cin.get();
cin.ignore(1000, ' ');
p=cin.get();
Ime i prezime: Ana Ivanovic
cout << "Inicijali su: "; Inicjali su: A.I.
cout << i << '.' << p << '.';
return 0;
}
U/I manipulatori
Manipulatori su definisani u <iomanip>
Primer:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
1
{
2
int i;
3
for (i=1; i<5; i++)
4
{
cout.width(i);
1
cout << i << endl;
2
}
3
cout << endl;
4
for (i=1; i<5; i++)
cout << setw(i) << i << endl;
return 0;
}
U/I manipulatori
Manipulatori za poravnavanje ispisa: left, right
Primer:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
const char *i[] = { "Marko", "Nikola" }; Rb. Prezime Ime
const char *p[] = { "Markovic", "Nikolic" }; --- ---------- ----------
1. Markovic Marko
cout << "Rb. Prezime Ime" << endl; 2. Nikolic Nikola
cout << "--- ---------- ----------\n"; --- ---------- ----------
for (int j=0; j<2; j++)
{
cout << setw(2) << right << j+1;
cout << ". ";
cout << setw(10) << left << p[j];
cout << " ";
cout << setw(10) << left << i[j];
cout << endl;
}
cout << "--- ---------- ----------\n";
return 0;
}
U/I manipulatori
Primer:
Manipulatori za popunjavanje ispisa: fill(), setfill
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
for (int i=1; i<5; i++)
{ 1
cout.width(i); cout.fill('0'); 02
cout << i << endl; 003
} 0004
cout << endl;
for (int i=1; i<5; i++) 1
{ x2
cout << setw(i); cout << setfill('x'); xx3
cout << i << endl; xxx4
}
cout << endl; 1
for (int i=1; i<5; i++) 20
{ 300
cout.width(i); cout.fill('0'); 4000
cout << left << i << endl;
}
return 0;
}
Rad sa fajlovima
C++ i fajlove vidi kao tokove.
Primer:
seekg(0) – pozicioniranje na početak fajla za čitanje
seekg(5) – pomeranje za 5 bajtova u odnosu na početak
seekg(5, ios::beg) – pomeranje za 5 bajtova u odnosu na početak
seekg(1, ios::cur) – pomeranje za 1 bajt prema kraju u odnosu na trenutnu poz.
seekg(-1, ios::cur) – pomeranje za 1 bajt prema početku u odnosu na tren. poz.
seekg(0, ios::end) – pozicioniranje na kraj
tellg() – očitavanje trenutne pozicije u fajlu za čitanje (broj bajtova u odnosu na poč.)
tellp() – očitavanje trenutne pozicije u fajlu za pisanje – analogno tellg()