Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Podstawy informatyki 2013/2014
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka
2
Operacje we/wy Operator <</>> wstawiania/wyjmowania do/z strumienia przeprowadzają operacje wy/we z obecnością formatowania. char z; int a, b; cin >> a >> z >> b; cout << a << endl; cout << z << endl; cout << b << endl; 1.5 1 . 5
3
Operacje we/wy char z; double a, b; cin >> a >> z >> b; cout << a << endl; cout << z << endl; cout << b << endl; 1.5
4
Nieformatowane operacje we/wy
Funkcje wyjmujące ze strumienia: istream &get(char &); int get(); istream &get(char *, streamsize, char=‘\n’); istream & getline(char *, streamsize, char=‘\n’); istream & read(char *, streamsize); streamsize readsome (char *, streamsize); istream & ignore(int, int);
5
Nieformatowane operacje we/wy
Dodatkowe funkcje: streamsize gcount(); int peek(); istream &putback(char); istream &unget();
6
Nieformatowane operacje we/wy
Funkcje wkładające do strumienia: ostream &put(char); ostream &write(const char *, streamsize);
7
istream &get(char &znak)
Funkcja wyjmuje ze strumienia jeden bajt i umieszcza go w zmiennej znak. char z; cin.get(z); cout << static_cast<int>(z) << endl; // cin.get(a).get(b).get(c); A 65 10
8
int get() Funkcja wyjmuje ze strumienia jeden bajt i umieszcza go w zmiennej a. int a; a=cin.get(); cout << static_cast<char>(a) << endl; cout << a << endl; A A 65
9
istream &get(char *, streamsize, char=‘\n’)
Funkcja wyjmuje ze strumienia nie jeden ale wiele znaków. Jej parametry oznaczają: char * - adres tablicy streamsize – maksymalna liczba odczytanych znaków char – ogranicznik char t[10],z; cin.get(t,10,'b'); cout << t << endl; cin.get(z); cout << z << endl; Funkcja pozostawia ogranicznik w strumieniu. aaabccc aaa b
10
istream &get(char *, streamsize, char=‘\n’)
abcdef char t[10],z; cin.get(t,3); cout << t << endl; cin.get(z); cout << z << endl; Funkcja automatycznie dodaje znak null. ab c
11
istream &getline(char *, streamsize, char=‘\n’)
Funkcja wyjmuje ze strumienia wiele znaków. Parametry jak poprzednio. char t[10]={" "},z; cin.getline(t,10,'3'); cout << t << endl; for (int i=0; i<10; i++) cout<<t[i]; cout<<endl; cin.get(z); cout << z << endl; Funkcja wyjmuje i wyrzuca ogranicznik. 12345 12 12 …… 4
12
istream &getline(char *, streamsize, char=‘\n’)
char t[5]={"...."},z; cin.getline(t,5); if (cin.fail()) { cout<<"BLAD"<<endl; cin.clear(); } cout << t << endl; cout<<endl; cin.get(z); cout << z << endl; W przypadku przekroczenia maksymalnej liczby znaków ustawiana jest flaga fail. 123456 BLAD 1234 5
13
istream &getline(istream, string, char=‘\n’)
string a; getline(cin,a); cout<<a<<endl; Nie musimy martwić się o liczbę znaków.
14
istream & read(char *, streamsize)
Funkcja podobna do get, ale w przypadku read na koniec C-stringu nie zostanie dodany znak NULL! Do wykorzystywania przy operacjach z plikami (operacje binarne). streamsize & readsome(char *, streamsize) Funkcja zwraca ile bajtów zostało wczytanych.
15
istream &ignore(int=1, int=EOF)
Funkcja wyjmuje ze strumienia określoną liczbę bajtów ale nigdzie ich nie zapisuje. char t1[10],t2[10]; cin.get(t1,3).ignore(3).get(t2,3); cout << t1 << endl; cout << t2 << endl; 01 56
16
istream &ignore(int, int)
char t1[10],t2[10]; cin.get(t1,3).ignore(3,static_cast<int>('3')).get(t2,3); cout << t1 << endl; cout << t2 << endl; 01 45
17
abc.def abc 3 streamsize gcount()
Zwraca informację ile znaków zostało wyjętych ze strumienia podczas ostatniego nieformatowanego wczytywania. char t[10]; cin.get(t,10,'.'); cout<<t<<endl; cout<<cin.gcount()<<endl; abc.def abc 3
18
abc.def abc 4 streamsize gcount()
char t[10]; cin.getline(t,10,'.'); cout<<t<<endl; cout<<cin.gcount()<<endl; abc.def abc 4
19
int peek() Jest to funkcja, która pozwala nam zajrzeć do strumienia. char t[10]; char a=static_cast<char>(cin.peek()); cin>>t; cout << a <<endl; cout << t << endl; abc a abc
20
istream &putback(char)
Zwraca znak do strumienia. char a,b; cin>>a; cout<<a<<endl; cin.putback(a); cin>>b; cout<<b<<endl; a a a
21
istream &unget() Zwraca ostatnio odczytany znak do strumienia. char a,b; cin>>a; cout<<a<<endl; cin.unget(); cin>>b; cout<<b<<endl; a a a
22
A-G-H- - A-G-H- ostream &put(char)
Służy do wstawienia do strumienia jednego znaku. char a[]="AGH"; for (int i=0;i<sizeof(a); i++) cout.put(a[i]).put('-'); string a="AGH"; for (int i=0;i<a.size(); i++) A-G-H- - A-G-H-
23
ostream &write(const char *, streamsize)
Funkcja wstawia do strumienia określoną liczbę bajtów. char a[]="AGH WIMiIP"; cout.write(a+4,6); cout << endl; A czy można tak: cout.write(a+4,6)<<endl; ???? WIMiIP WIMiIP
24
ostream &write(const char *, streamsize)
double pi=3.14; cout.write(reinterpret_cast<char*>(&pi),sizeof(pi)); cout << endl; int i=0x ; cout.write(reinterpret_cast<char*>(&i),sizeof(i));
25
Strumienie płynące do i z plików
Biblioteka: <fstream> Klasy: ofstream ifstream fstream ifstream plik; tworzenie strumienia do odczytu ofstream plik; tworzenie strumienia do zapisu fstream plik; tworzenie strumienia do odczytu i zapisu
26
void open(char *, ios_base=…)
Otwarcia można dokonać za pomocą funkcji open lub konstruktora. ifstream plik; plik.open("dane.txt”); ifstream plik("dane.txt”);
27
void open(char *, ios_base=…)
Drugi argument określa tryb pracy: in otwórz do czytania out otwórz do pisania ate otwórz i ustaw się na końcu app otwórz do dopisywania na końcu trunc otwórz, a jeśli plik istnieje skasuj jego zawartość Domniemania: ifstream in ofstream out fstream brak domniemania
28
Flagi stanu błędu strumienia
Istnieją cztery flagi: goodbit – ustawiana gdy pozostałe flagi nie są ustawione, czyli jest OK eofbit – ustawiana, gdy podczas czytania napotkamy koniec pliku failbit – ustawiana, gdy jakaś operacja we/wy się nie powiodła badbit – ustawiana, gdy wystąpi poważny błąd dotyczący strumienia
29
Funkcje do pracy na flagach
bool good() bool eof() bool fail() bool bad()
30
bool good() ifstream plik; plik.open("dane.txt"); if (plik.good()) cout << "Plik zostal otwarty\n"; else cout << "Plik nie zostal otwarty\n"; plik.close();
31
bool eof() char litera; ifstream plik; plik.open("napis.txt"); for(;;) { plik.get(litera); if(plik.eof()) break; cout << litera; } cout << endl; plik.close();
32
bool fail() int liczba; cin >> liczba; if (cin.fail()) cout<<"Nie liczba"<<endl;
33
const char* c_str() Funkcja składowa klasy string. string nazwa; getline(cin,nazwa); ifstream plik(nazwa.c_str());
34
Ustawianie i kasowani flag błędu
io_state rdstate(); void clear(io_state = goodbit); void setstate(io_state); enum io_state { goodbit=0; eofbit=1; failbit=2; badbit=4; };
35
Wybór miejsca czytania i pisania
pos_type tellg(); pos_type tellp(); istream &seekg(off_type, seek_dir=ios::beg); ostream &seekp(off_type, seek_dir=ios::beg); enum seek_dir { beg; cur; end; };
36
Zastosowanie seekg i tellg
ifstream plik; plik.open("dane.txt"); plik.seekg(0,ios::end); cout << plik.tellg() << endl; plik.close(); 11
37
Zastosowanie seekp ofstream plik; plik.open("napis.txt"); plik.write("Ala ma kota", 11); plik.seekp(0); plik << "Ela"; plik.close();
38
Strumienie płynące do i z obiektów klasy string
Biblioteka: <sstream> Klasy: ostringstream istringstream stringstream istringstream s; tworzenie strumienia do odczytu ostringstream s; tworzenie strumienia do zapisu stringstream s; tworzenie strumienia do odczytu i zapisu
39
Strumień czytający z obiektu klasy string
Konstruktory: istringstream(const string & tekst); istringstream(); Funkcje składowe: void str(const string & tekst) const; string str() const;
40
Strumień czytający z obiektu klasy string
string t="12 ala 13.5 X"; istringstream s; s.str(t); cout << s.str() << endl; int a; string b; double c; char d; s>>a>>b>>c>>d; cout<<a<<endl<<b<<endl<<c<<endl<<d<<endl; 12 ala 13.5 X 12 ala 13.5 X
41
Strumień piszący do obiektu klasy string
Konstruktory: ostringstream(); ostringstream(const string & tekst); Funkcje składowe: void str(const string & tekst) const; string str() const;
42
Strumień piszący do obiektu klasy string
string t; int a=12; string b="ala"; double c=13.5; char d='X'; cout<<a<<endl<<b<<endl<<c<<endl<<d<<endl; ostringstream s; s<<a<<" "<<b<<" "<<c<<" "<<d; t=s.str(); cout<<t<<endl; 12 ala 13.5 X 12 ala 13.5 X
43
Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie:
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.