Wejście wyjście strumieniowe

Podobne dokumenty
C++ - [3-5] Pliki i strumienie w C++

Programowanie w językach

Operacje wejścia/wyjścia (odsłona druga) - pliki

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Pliki wykład. Dorota Pylak

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Pliki wykład. Dorota Pylak

Programowanie i struktury danych

Pliki wykład 2. Dorota Pylak

Klasa iostream... 1 Klasy ofstream, ifstream Struktura FILE... 8

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Spis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

jest mocny, skoro da się w nim wyrazić nowe pojęcia; łatwiej przenieść go na nową platformę jest mniejszy.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Programowanie Obiektowe i C++

Wykład 2 Operacje wejściawyjścia. Ewa Gajda

Operacje wejścia/wyjścia odsłona pierwsza

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

Język C++ Różnice między C a C++

Programowanie Procedurale. Pliki w języku C++

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Pliki wykład 2. Dorota Pylak

Pliki wykład 2 -przekazywanie strumieni do funkcji -funkcje get(char &) i getline(string)

C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony

Język C++ wykład VIII

Operacje na plikach (niskiego poziomu) < IO.H >

Wykład :37 PP2_W9

Język C++ zajęcia nr 1

Funkcje zawarte w bibliotece < io.h >

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Funkcje zawarte w bibliotece < io.h >

Wstęp do programowania obiektowego

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

klasy strumieniowe uzupełnienie Języki Programowania (język C++) Klasy strumieniowe Pliki nagłówkowe Klasy strumieniowe Obiekty globalne

Referencje. Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Zaawansowane Programowanie Obiektowe. Informacje organizacyjne:

Strumienie standardowe C

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Biblioteka standardowa - operacje wejścia/wyjścia

1 Strumienie. 2 Pliki. 2.1 Zapis do pliku tekstowego. Programowanie w j zyku C - Adam Krechowicz, Daniel Kaczmarski

Podstawy programowania w C++

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wstęp do Programowania 2

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Pliki i manipulatory. - Łańcuchowe funkcje wejścia - getline(string) Dorota Pylak - Tryby otwarcia pliku - Formatowanie manipulatory

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony SZABLONY SZABLONY FUNKCJI

Podstawy Programowania

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Referencje. Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Zaawansowane Programowanie Obiektowe. Informacje organizacyjne:

Wstęp do informatyki- wykład 8 Pętla while, do while,for -pętla w pętli- przykłady Operator rzutowania Manipulatory

C++ - szablony. C++ - szablony. C++ - strumienie. C++ - strumienie. C++ - strumienie STRUMIENIE

Dziedziczenie & W slajdach są materiały zapożyczone z

C++ - strumienie. C++ - strumienie. C++ - strumienie. C++ - strumienie. C++ - strumienie STRUMIENIE

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Programowanie obiektowe

C++ - strumienie. C++ - strumienie. C++ - strumienie. C++ - strumienie. C++ - strumienie STRUMIENIE

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Podstawy programowania skrót z wykładów:

Wprowadzenie do programowania i programowanie obiektowe

KURS C/C++ WYKŁAD 5. Typ wyliczeniowy enum

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Wskaźniki do funkcji. Wykład 11. Podstawy programowania ( język C ) Wskaźniki do funkcji (1) Wskaźniki do funkcji (2)

Wstęp do programowania

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Wykład 9 Pliki cz.3 (getline(string)) Typ wyliczeniowy enum

Podstawy programowania w języku C++

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Pliki. Informacje ogólne. Obsługa plików w języku C

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Rzutowanie i konwersje

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie w języku C++

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

dr inż. Paweł Myszkowski Wykład nr 8 ( )

Pytania sprawdzające wiedzę z programowania C++

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Operatory na rzecz typu TString

Programowanie Obiektowew języku C++ Zadania L4

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Wstęp do programowania

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Programowanie i struktury danych

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.

Transkrypt:

PARADYGMATY PROGRAMOWANIA Wykład 6 Wejście wyjście strumieniowe stdin standardowy strumień wejściowy stdout standardowy strumień wyjściowy stderr standardowy strumień komunikatów o błędach pliki - inne źródła wejścia / wyjścia programu plik jest uporządkowanym strumieniem bajtów Trybu zapisu / odczytu ze strumieni binarny strumień jest nieinterpretowanym przez procedury zapisu/odczytu ciągiem bajtów tekstowy zakłada się, że strumień jest zapisem ciągu znaków pisarskich (znak może składać się z więcej niż jednego bajtu zależnie od systemu kodowania), procedury wejścia / wyjścia mogą dokonywać konwersji pomiędzy postacią binarną a ustaloną postacią tekstową Ogólne zasady wykorzystywania strumieni w programach Strumienie, z których chce korzystać program są dla programisty reprezentowane przez obiekty specjalnie do tego celu zaprojektowanych klas. stdin jest reprezentowany za pomocą predefiniowanego obiektu o nazwie cin stdout jest reprezentowany za pomocą predefiniowanego obiektu o nazwie cout Strumienie (z wyjątkiem standardowych) muszą być przed użyciem otwarte Przyjęto konwencję, że dla klas reprezentujących strumienie definiuje się operatory wejścia ( >> ) i wyjścia ( >> ) o następujących cechach: lewym operandem jest referencja do strumienia, prawym operandem jest obiekt lub l-wyrażenie typu prostego, który jest żródłem danych dla operacji,

wartością operatora jest referencja do strumienia przekazanego jako lewostronny operand wówczas można wielokrotnie używać operatorów << lub >> w jednym wyrażeniu. Przeciążone operatory << i >> są zdefiniowane dla typów wbudowanych (int, char, char*, double float ) oraz dla niektórych typów definiowanych w bibliotekach standardowych (np. dla typu string). Dla klas definiowanych przez programistę może on zdefiniować operator << i >> w sposób specyficzny dla swojego typu danych. Hierarchia klas do obsługi wejścia wyjścia strumieniowego cin obiekt klasy istream cout obiekt klasy ostream Operacje na plikach: ifstream (input file stream) klasa pozwalająca na odczyt z pliku ofstream (output file stream) klasa pozwalająca na zapis do pliku fstream - klasa pozwalająca na odczyt i zapis w pliku Operacje na ciągach znaków pozwalają traktować bufory znakowe jak strumienie, w szczególności można w ten sposób dokonywać konwersji danych pomiędzy postacią znakową i binarną. Strumienie są buforowane nie ma pewności, że wykonanie operatora wyjścia << spowoduje natychmiastowe pojawienie się danych na urządzeniu fizycznym.

metoda flush() - wymusza opróżnienie bufora i zapis danych do urządzenie: cout.flush(); Działanie operatora odczytu >> w odniesieniu do danych typu char * (łańcuchy znaków) operator odczytuje dane z pominięciem poprzedzających białych znaków (spacja, tabulacja, nowa linia) i kończy odczytywanie po napotkaniu pierwszego białego znaku po "nie-białym" wniosek nie można odczytywać napisów zawierających białe znaki metoda get pozwala odczytać łańcuch z białymi znakami istream & get( char &c); odczyt pojedynczego znaku istream & get( char *buf, int n, char term = '\n' ); odczytuje nie więcej niż n-1 znaków do bufora buf, kończy po napotkaniu znaku term, znak kończący nie jest odczytywany i pozostaje w strumieniu, znak '\0' jest zapisywany w buforze istream & getline(); podobnie jak get ale znak nowej linii jest usuwany ze strumienia lecz nie trafia do bufora W przypadku osiągnięcia końca strumienia ( Ctrl-Z ) funkcje zwracają referencję pustą (NULL) char c; while (cin.get( c )!= NULL) printf("%d\n", c ); while (cin.get( buf, 50 )!= NULL) printf("%s\n", buf ); // BŁĄD zapetlenie programu Przeciążanie operatorów << i >> dla typów zdefiniowanych przez programistę class compl friend ostream & operator << ( ostream & out_strm, compl nmb ); friend istream & operator >> ( istream & out_strm,

compl & nmb ); private: double re, im; ; public: compl( double re = 0.0, double im = 0.0 ); void set_re ( double re ); void set_im( double im ); ostream & operator << ( ostream & out_strm, compl nmb ) out_strm << nmb.re << " " << nmb.im ; return out_strm; istream & operator >> ( istream & in_strm, compl & nmb ) in_strm >> nmb.re >> nmb.im ; return in_strm; Sprawdzanie statusu strumienia: class ios public: enum is_state( goodbit, eofbit, failbit, badbit ); int bad() const; // wystąpił błąd int eof() const; // osiągnięto koniec pliku int fail() const; // wystąpił błąd nie utracono danych int good() const; // następna operacja może się powiesc //... ; Badanie stanu za pomoca metod bad(), eof(), fail(), good() za pomoca metody io_state rdstate(); Formatowanie i manipulatory manipulator obiekt modyfikujący sposób działania operatorów strumieniowych manipulatory z parametrami zdefiniowane w pliku nagłówkowym iomanip.h określanie formatu liczby całkowitej

oct ósemkowy, hex szesnastkowy dec dziesiętny UWAGA: konwersji poddawana jest wartość kodu U2 liczby, np hex dla 1 -> ffffffff oct dla 1 -> 37777777777 określanie szerokości pola setw( int width ) określa szerokośc pola na wyświetlenie następnej danej setfill( char filler = ' ' ) określa znak wypełniający pole obowiązuje aż do odwołania setprecision ( int precision = 6 ) określenie ilości miejsc po przecinku dla liczb zmiennoprzecinkowych Operacje na plikach wymagają włączenia pliku fstream (bez.h konwencja nazywania plików nagłówkowych w C++) oraz uaktywnienia przestrzeni nazw std #include <fstream> using namewspace std; Deklaracja zmiennej plikowej: fstream file; otwarcie pliku metoda open void open( const char *s, ios_base::openmode mode = ios_base::in ios_base::out ); np. file.open( "c:\\test.txt", ios::out ios::app )... file.close(); Tryby otwarcia: in, out, app, trunc nocreate, noreplace, binary, ate Operacje binarne: write( char *buffer, int size ); read( char *buffer, int size );

Pozycjonowanie w pliku class ios enum seek_dir (beg, curr, end ); istream seekg( int rel_pos, seek_dir d = ios::beg ); int tellg(); ostream seekp( int rel_pos, seek_dir d = ios::beg ); int tellp(); Operacje wejscia-wyjscia w pamięci: strumień może być symulowany w pamięci w tablicy znakowej (lub za pomocę typu string) wszystkie operacje które moga byc wykonywane na ostream moga być też wykonane na ostrstream, Podobnie dla istream i istrstream istrstream::istrstream( char * buf, int size ); ostrstream::istrstream( char * buf, int size ); #include <iostream> using namespace std ; #include <iomanip> #include <strstream> // <--- bo uzywamy ostrstream #include <sstream> // <-- bo uzywamy ostringstream /*******************************************************/ int main() int nr_silnika = 4 ; float temperat = 156.7123 ; char komunikat[80] ; ostrstream strumyk(komunikat, sizeof(komunikat) ); // strumyk << "Awaria silnika "<< setw(2) << nr_silnika << ", temperatura oleju " << setprecision(2) << temperat << " stopni C \n" ; // cout << komunitat; strumyk.seekp(8, ios_base::beg); // strumyk << "XYZ" ; cout << "Po zabawie z pozycjonowaniem :\n" << komunikat ;

// ##################### NOWY STYL ######################" ostringstream strumyk2; // strumyk2 << "Awaria silnika "<< setw(2) << nr_silnika << ", temperatura oleju " << setprecision(2) << temperat << " stopni C \n" ; // if(!strumyk2) cout << "jakis blad "<< endl; strumyk2 << "Musisz cos zrobic!!!\n" << ends ; // cout << strumyk2.str() <, endl; strumyk2.seekp(8, ios_base::beg); // strumyk2 << "XYZ" ; cout << "Po zabawie z pozycjonowaniem :\n" << strumyk2.str() ;