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

Podobne dokumenty
Biblioteka standardowa - operacje wejścia/wyjścia

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h >

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

Programowanie Proceduralne

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

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

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

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

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

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

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

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

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

Podstawy programowania w języku C++

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

Plik jest reprezentowany przez strumień znaków (bajtów) o zmiennej długości. Koniec strumienia identyfikowany jest znacznikiem końca pliku EOF.

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

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

wer. 7 z drobnymi modyfikacjami Wojciech Myszka :48:

Ghost in the machine

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

W języku C każdy plik fizyczny jest ciągiem bajtów, z których każdy może być niezależnie odczytany. Borland 01234

Programowanie Procedurale. Pliki w języku C++

Programowanie w językach wysokiego poziomu

Podstawy programowania w języku C++

INFORMATYKA Studia Niestacjonarne Elektrotechnika

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

Podstawy programowania w języku C++

MATERIAŁY POMOCNICZE PODSTAWY PROGRAMOWANIA Na podstawie: Programowanie w C - Stworzone na Wikibooks, bibliotece wolny podręczników

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

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

PRZYKŁADY OPERACJI PLIKOWYCH z wykorzystaniem biblioteki <stdio.h>

Struktury. Przykład W8_1

Strumienie i pliki. Programowanie Proceduralne 1

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

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

Tablice, funkcje - wprowadzenie

Języki i metody programowania I

Argumenty wywołania programu, operacje na plikach

Programowanie w językach

7 Przygotował: mgr inż. Maciej Lasota

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Stałe i zmienne znakowe. Stała znakowa: znak

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

Języki programowania. Karolina Mikulska-Rumińska Pokój 573, tel Konsultacje wtorek 9-10.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Politechnika Białostocka, Wydział Elektryczny, Katedra Elektrotechniki Teoretycznej i Metrologii ul. Wiejska 45D, Białystok

Bardzo szybkie podsumowanie: wykład 4

Podstawy programowania w języku C++

Podstawy Programowania. Specyfikacja funkcji, operacje wejścia i wyjścia na plikach, rekurencja, tablice i wskaźniki

dr inż. Jarosław Forenc

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

4. Pliki Informacje ogólne o dostępie do plików w PHP Sprawdzanie istnienia pliku file_exists()

Politechnika Białostocka, Wydział Elektryczny, Katedra Elektrotechniki Teoretycznej i Metrologii ul. Wiejska 45D, Białystok

1. Wprowadzanie danych z klawiatury funkcja scanf

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

C Operacje na plikach

Operacje powiązane z systemem:

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

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

część 4 biblioteka standardowa wejścia - wyjścia znakowe wejście - wyjście Jarosław Gramacki Instytut Informatyki i Elektroniki

Temat: Operacje na plikach. Pliki tekstowe i binarne. Faza otwarcia, zapisu/odczytu i zamknicia pliku.

2 Przygotował: mgr inż. Maciej Lasota

część 6 biblioteka standardowa wejścia - wyjścia 1. sformatowane wejście - wyjście 2. rekordowe (binarne) wejście - wyjście

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

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

Bardzo szybkie podsumowanie: wykład 5

Spis treści JĘZYK C - PLIKI BINARNE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF30

Języki programowania. Tablice struktur, pliki struktur. Część ósma. Autorzy Tomasz Xięski Roman Simiński

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

Inne darmowe! kompilatory języka C działające m.in. po systemem WINDOWS:

Struktura programu. Słowa kluczowe. Komentarze. Zmienne

Podstawy programowania C. dr. Krystyna Łapin

Ćwiczenie 7. Strumień trójelementowy. A g a EOF... EOF... Wprowadzenie do programowania w języku C. Wskaźnik bieżącej pozycji. bieżącej pozycji.

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

Ćwiczenie nr 8. Temat: Operacje na plikach - zapis i odczyt danych.

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

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

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

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

1 Przetwarzanie plików

Tablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Wstęp do Programowania, laboratorium 02

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

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Wykład PASCAL - Pliki tekstowe

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Program 14. #include <iostream> #include <ctime> using namespace std;

Transkrypt:

Podstawy programowania ( język C ) Wskaźniki do funkcji Wykład 11. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Wskaźniki do funkcji (1) W języku C funkcje nie są zmiennymi, ale moŝna definiować wskaźniki do funkcji. Deklaracja wskaźnika do funkcji ma postać: gdzie RT ( * Name ) ( PSL ); Name nazwa deklarowanego wskaźnika, RT ( return type ) typ zwracanej wartości ( moŝe być void ), PSL ( parameter specifications list ) lista specyfikacji parametrów. N.p. double sin( double x ); double cos( double ); // deklaracja funkcji sin // deklaracja funkcji cos /****/ double (*fptr) ( double ); // deklaracja wskaźnika do funkcji // dokładniej: deklaracja wskaźnika do funkcji przyjmującej jeden argument // typu double i zwracającej wartość typu double. Wskaźniki do funkcji (2) 1. Wskaźnikom do funkcji moŝna nadawać wartości: fptr = sin;... fptr = cos; 2. Wskaźnik do funkcji moŝe być uŝyty do wywołania funkcji, której wskazanie zostało mu przypisane: double x, y, (*fptr) ( double ); fptr = cos; y = cos( x ); // wywołanie funkcji cos (bezpośrednie) y = (*fptr)( x ); // pośrednie wywołanie funkcji cos y = fptr( x ); // pośrednie wywołanie funkcji cos Tomasz Marks - Wydział MiNI PW -3- Tomasz Marks - Wydział MiNI PW -4-

Wskaźniki do funkcji (3) 3. Wskaźniki do funkcji mogą być umieszczane w tablicach: double *fptab[ ]( double ) = sin, cos, exp ; 4. Funkcja moŝe przyjmować wskazanie do funkcji jako swój argument ( parametr funkcji moŝe być wyspecyfikowany jako wskaźnik do funkcji ) Wskaźniki do funkcji (4) PowyŜsze deklaracje moŝna zapisać w bardziej czytelnej postaci wykorzystując deklarację typedef : typedef double ( * FUNPTR ) ( double ); wtedy zamiast porzednich deklaracji moŝna będzie napisać: lub double Fun ( int k, double (*fun)( double ) ); double Fun ( int, double (*)( double ) ); /****/ double (*fptr) ( double ); // deklaracja wskaźnika do funkcji FUNPTR fptr; 5. Funkcja moŝe zwracać wskaźnik do funkcji jako swoją wartość: double ( * Fun ( int n, double x) ) ( double z) ; lub double ( * Fun ( int, double) ) ( double ) ; /*3*/ double *fptab[ ]( double ) = sin, cos, exp ; FUNPTR fptab[ ] = sin, cos, exp ; UWAGA: Nawiasy ( ) są niezbędne!!! Tomasz Marks - Wydział MiNI PW -5- Tomasz Marks - Wydział MiNI PW -6- Podobnie: Wskaźniki do funkcji (4a) /*4*/ double Fun ( int k, double (*fun)( double ) ); lub double Fun ( int, double (*)( double ) ); lub double Fun ( int k, FUNPTR fun ); double Fun ( int, FUNPTR ); /*5*/ double ( * Fun ( int n, double x ) ) ( double ) ; FUNPTR Fun ( int n, double x ); Wskaźniki do funkcji (5) UWAGA: Do wskazań (wskaźników) do funkcji nie moŝna stosować operacji arytmetyki wskazań, które są dopuszczalne w przypadku wskazań (wskaźników) do danych. N.p. double *p, *q; double (*pf)( int ), (*pg)( int );... p++; // O.K. pf++; // Błąd! k = p q; // O.K. k = pf pg; // Błąd! p = q + 3; // O.K. pf = pg + 3; // Błąd! Tomasz Marks - Wydział MiNI PW -7- Tomasz Marks - Wydział MiNI PW -8-

zadanie Chcemy znaleźć przybliŝone rozwiązanie równania metoda bisekcji f ( x ) = 0 Zakładamy, Ŝe (1) funkcja f(x) jest ciągła; (2) rozwiązanie jest zlokalizowane w znanym przedziale [ a, b ], t.zn. f( a ) * f( b ) < 0 ; (3) wymagana dokładność przybliŝenia wynosi eps. Tomasz Marks - Wydział MiNI PW -9- Tomasz Marks - Wydział MiNI PW -10- metoda bisekcji (1) metoda bisekcji (2) Tomasz Marks - Wydział MiNI PW -11- Tomasz Marks - Wydział MiNI PW -12-

metoda bisekcji (3) metoda bisekcji (4) Tomasz Marks - Wydział MiNI PW -13- Tomasz Marks - Wydział MiNI PW -14- metoda bisekcji (5) metoda bisekcji (6) double f ( double ); double a, b, eps; double x; scanf ( "%lf%lf%lf", &a, &b, &eps ); // do x = ( b a ) / 2; if ( f( x ) == 0. ) break; if ( f( x ) * f( a ) > 0 ) a = x; else b = x; while ( b a > eps ); //.. printf ( "\nx = %.5f ", x ); double f ( double ); double a, b, eps; double x, fx, fa; scanf ( "%lf%lf%lf", &a, &b, &eps ); // fa = f( a ); do x = ( b a ) / 2; fx = f( x ); if ( fx == 0. ) break; if ( fx * fa > 0 ) a = x; else b = x; while ( b a > eps ); //.. printf ( "\nx = %.5f ", x ); Tomasz Marks - Wydział MiNI PW -15- Tomasz Marks - Wydział MiNI PW -16-

metoda bisekcji (7) double bisekcja ( double (*f) ( double), double a, double b, double eps ) double x, fx, fa = f( a ); do x = ( b a ) / 2; fx = f( x ); if ( fx == 0. ) break; if ( fx * fa > 0 ) a = x; else b = x; while ( b a > eps ); strumienie i pliki return x; Tomasz Marks - Wydział MiNI PW -17- Tomasz Marks - Wydział MiNI PW -18- Strumienie terminologia (1) Strumienie terminologia (2) Strumień (ang. stream) jest pojęciem abstrakcyjnym oznaczającym źródło lub miejsce docelowe przesyłanych danych. Strumień moŝe być skojarzony z plikiem dyskowym, klawiaturą, monitorem, drukarką lub innym urządzeniem zewnętrznym. Na ogół rozróŝniamy dwa rodzaje strumieni: - tekstowe: składające się z ciągów wierszy; kaŝdy wiersz zawiera zero lub więcej znaków i jest zakończony znakiem '\n'; w pewnych środowiskach strumienie tekstowe są przekształcane do jakiejś innej postaci ( najczęściej polega to na zastąpieniu znaku końca wiersza '\n' sekwencją 2 znaków: '\r' i '\n' ); - binarne: składające się z ciągów nie przetworzonych bajtów reprezentujących wewnętrzne dane programu. Strumień kojarzony jest z plikiem lub urządzeniem za pomocą operacji otwarcia. Skojarzenie jest zrywane przez operację zamknięcia. W chwili rozpoczęcia wykonania programu, trzy strumienie są juŝ otwarte: stdin standardowe wejście, stdout standardowe wyjście, stderr standardowe wyjście błędów. Strumieni tych nie trzeba otwierać ani zamykać. Strumień identyfikowany jest w programie przez wskaźnik do obiektu typu FILE. Typ FILE ( struktura zawierająca informacje potrzebne do obsługi strumienia ) jest zdefiniowany <stdio.h>. N.p. FILE *f; f = fopen( "plik.txt", "r" ); // deklaracja wskaźnika do strumienia // otwarcie strumienia identyfikowanego przez // przez f i skojarzenia go z plikiem plik.txt. Tomasz Marks - Wydział MiNI PW -19- Tomasz Marks - Wydział MiNI PW -20-

Strumienie - fopen FILE *fopen ( const char *filename, const char *mode ); Otwiera plik. filename wskazuje nazwę pliku, który ma być otwarty jako strumień. mode wskazuje napis określający tryb dostępu do strumienia ( patrz tabelka dalej ). wskazanie strumienia, jeśli operacja się powiodła, NULL, w przypadku niepowodzenia. UWAGA 1. Nazwy plików są ograniczone do FILENAME_MAX znaków. UWAGA 2. Jednocześnie moŝe być otwartych co najwyŝej FOPEN_MAX plików. UWAGA 3. JeŜeli tryb dostępu równocześnie umoŝliwia odczyt i zapis, to pomiędzy odczytem i zapisem naleŝy wywołać funkcję fflush lub jedną z funkcji pozycjonujących plik ( patrz dalej ). Tomasz Marks - Wydział MiNI PW -21- mode "r" "w" "a" "r+" "w+" znaczenie Strumienie - fopen Dopuszczalne napisy określające tryb dostępu do strumienia tekstowego: tylko odczyt (plik musi istnieć) tylko zapis (wyczyść plik, gdy istnieje, w przeciwnym przypadku utwórz) tylko zapis (dopisuj na końcu, gdy istnieje, w przeciwnym przypadku utwórz) zapis i odczyt (plik musi istnieć, po otwarciu ustaw się na początku pliku) zapis i odczyt (wyczyść plik, gdy istnieje, w przeciwnym przypadku utwórz) Dla strumienia binarnego powyŝsze teksty naleŝy uzupełnić literą b. N.p. "rb", "w+b". Tomasz Marks - Wydział MiNI PW -22- int fclose ( FILE *stream ); Strumienie fclose, fflush Zamyka strumień. Wypisuje wszystkie nie wypisane dane związane ze strumieniem, kasuje wszystkie nie przeczytane dane z buforów wejściowych, zwalnia automatycznie przydzielone bufory i na koniec zamyka plik. stream identyfikuje strumień. 0, jeśli operacja się powiodła, EOF, w przypadku jakiegoś błędu. int fflush ( FILE *stream ); Dla strumieni wyjściowych wypisuje wszystkie nie wypisane dane. Dla strumieni wejściowych efekt nie jest zdefiniowany. fflush(null) wypisuje dane ze wszystkich otwartych strumieni wyjściowych. stream identyfikuje strumień. 0, jeśli operacja się powiodła, EOF, w przypadku jakiegoś błędu. Strumienie inne funkcje zarządzające Inne funkcje z tej grupy, które dobrze jest znać: FILE *freopen ( const char *filename, const char *mode, FILE *stream ); int remove ( const char *filename ); int rename ( const char *oldname, const char *newname ); FILE *tmpfile ( void ); char *tmpnam ( char s[ L_tmpnam ] ); int setvbuf ( FILE *stream, char *buf, int mode, size_t size ); int setbuf ( FILE *stream, char *buf ); Tomasz Marks - Wydział MiNI PW -23- Tomasz Marks - Wydział MiNI PW -24-

Strumienie formatowane we/wy int fprintf ( FILE *stream, const char *format,... ); int fscanf ( FILE *stream, const char *format,... ); Formatowane we/wy z/do tablicy znakowej Przy okazji zauwaŝmy jeszcze, Ŝe są dostępne równieŝ funkcje int sprintf ( char *buf, const char *format,... ); int sscanf ( const char *buf, const char *format,... ); Funkcje w pełni analogiczne do znanych nam juŝ funkcji printf i scanf. Faktycznie printf ( format,... ) jest równowaŝne fprintf ( stdout, format,... ) i analogicznie scanf ( format,... ) jest równowaŝne fscanf ( stdin, format,... ) One teŝ są analogiczne do znanych nam juŝ funkcji printf i scanf. W wywołaniach: char buffer[128]; sprintf ( buffer, format,... ) sscanf ( buffer, format,... ) rolę wyjścia / wejścia spełnia bufor znakowy buffer. Tomasz Marks - Wydział MiNI PW -25- Tomasz Marks - Wydział MiNI PW -26- Strumienie bezpośrednie we/wy size_t fread ( void *buf, size_t size, size_t nobj, FILE *stream ); Wczytuje ze strumienia stream do tablicy buf co najwyŝej nobj obiektów o rozmiarze size bajtów kaŝdy. liczbę odczytanych obiektów, która moŝe być mniejsza od Ŝądanej. Do zbadania stanu strumienia naleŝy uŝyć funkcji feof i ferror. size_t fwrite ( const void *buf, size_t size, size_t nobj, FILE *stream ); Wypisuje do strumienia stream z tablicy buf co najwyŝej nobj obiektów o rozmiarze size bajtów kaŝdy. liczbę wypisanych obiektów. JeŜeli ta liczba jest mniejsza od Ŝądanej, to znaczy, Ŝe wystąpił błąd. Strumienie funkcje pozycjonujące int fseek ( FILE *stream, long offset, int origin ); Wyznacza pozycję w strumieniu stream. Dla plików binarnych nowa pozycja jest w miejscu oddalonym o offset bajtów od punktu odniesienia określonego przez origin. origin moŝe mieć wartość: SEEK_SET - początek pliku, SEEK_CUR - pozycja bieŝąca, SEEK_END - koniec pliku. Dla plików tekstowych interpretacja jest trudniejsza (patrz K&R Dodatek B1.6 ). Zwraca wartość: 0, jeŝeli operacja się powiodła, wartość róŝna od zera, w przeciwnym przypadku. long ftell ( FILE *stream ); Zwraca wartość: bieŝąca pozycja dla strumienia stream, -1, w przypadku błędu. Tomasz Marks - Wydział MiNI PW -27- Tomasz Marks - Wydział MiNI PW -28-

Strumienie - inne funkcje pozycjonujące Inne funkcje z tej grupy, które dobrze jest znać: void rewind ( FILE *stream ); int fgetpos ( FILE *stream, fpos_t *ptr ); int fsetpos ( FILE *stream, const fpos_t *ptr ); Strumienie obsługa błędów void clearerr ( FILE *stream ); int feof ( FILE *stream ); int ferror ( FILE *stream ); void perror ( const char *s ); Tomasz Marks - Wydział MiNI PW -29- // pliki1.c #include <stdlib.h> #include <stdio.h> int main ( void ) FILE *file; Strumienie Dostęp do plików file = fopen( "charset.txt", "w" ); fputs( "Nie mozna otworzyc pliku do zapisu!\n", stdout ); for ( i = 32; i < 256; i++ ) fprintf( file, "kod: %3d znak: %c \n", i, i ); file = fopen( "charset.txt", "r" ); fputs( "Nie mozna otworzyc pliku do odczytu!\n", stdout ); int c; while ( (c = fgetc( file ))!= EOF ) fputc( c, stdout ); Tomasz Marks - Wydział MiNI PW -30- // pliki1.c Strumienie Dostęp do plików (1) #include <stdlib.h> #include <stdio.h> int main ( void ) FILE *file; file = fopen( "charset.txt", "w" ); fputs( "Nie mozna otworzyc pliku do zapisu!\n", stdout ); for ( i = 32; i < 256; i++ ) fprintf( file, "kod: %3d znak: %c \n", i, i ); Tomasz Marks - Wydział MiNI PW -31- Strumienie Dostęp do plików (2) file = fopen( "charset.txt", "r" ); fputs( "Nie mozna otworzyc pliku do odczytu!\n", stdout ); int c; while ( (c = fgetc( file ))!= EOF ) fputc( c, stdout ); Tomasz Marks - Wydział MiNI PW -32-

Strumienie Dostęp do plików (3) kod: 32 znak: kod: 33 znak:! kod: 34 znak: " kod: 35 znak: # kod: 36 znak: $ kod: 37 znak: % kod: 38 znak: &......... kod: 97 znak: a kod: 98 znak: b kod: 99 znak: c kod: 100 znak: d kod: 101 znak: e kod: 102 znak: f kod: 103 znak: g Tomasz Marks - Wydział MiNI PW -33- // pliki2.c Strumienie Dostęp do plików (1a) #include <stdlib.h> #include <stdio.h> int main ( void ) int i; FILE *file; file = fopen( "charset.txt", "w+" ); puts( "Nie mozna otworzyc pliku do zapisu!\n" ); for ( i = 32; i< 256; i++ ) fprintf( file, "kod: %3d znak: %c \n", i, i ); Tomasz Marks - Wydział MiNI PW -34- Strumienie Dostęp do plików (2a) if ( fseek( file, 0, SEEK_SET ) ) puts( "Nie mozna wypozycjonowac pliku do odczytu!\n" ); int c; while ( (c = fgetc( file ))!= EOF ) putchar( c ); Koniec wykładu 11. Tomasz Marks - Wydział MiNI PW -35- Tomasz Marks - Wydział MiNI PW -36-