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



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

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h >

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

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

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

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

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

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

Programowanie Proceduralne

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 INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

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

Programowanie w językach wysokiego poziomu

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

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 VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Programowanie Procedurale. Pliki w języku C++

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

Podstawy programowania w języku C++

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

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

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

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

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

wer. 7 z drobnymi modyfikacjami Wojciech Myszka :48:

Ghost in the machine

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

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

Argumenty wywołania programu, operacje na plikach

Strumienie i pliki. Programowanie Proceduralne 1

Podstawy programowania 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.

INFORMATYKA Studia Niestacjonarne Elektrotechnika

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

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

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

Podstawy programowania w języku C++

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

Podstawy programowania w języku C++

7 Przygotował: mgr inż. Maciej Lasota

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

Struktury. Przykład W8_1

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

dr inż. Jarosław Forenc

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

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

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

Informatyka programowanie w języku C część II. dr hab. inż. Mikołaj Morzy

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

Programowanie Proceduralne

Języki i metody programowania I

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

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

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

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

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

Programowanie w językach

#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 ); }

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

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

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

2 Przygotował: mgr inż. Maciej Lasota

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

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

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

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

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

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

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

Tablice, funkcje - wprowadzenie

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Podstawy programowania 1

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

#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 ); }

1. Wprowadzanie danych z klawiatury funkcja scanf

Wskaźniki w C. Anna Gogolińska

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

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

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Wstęp do Programowania, laboratorium 02

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

Poprzedni wykład [ ] :

Łącza nienazwane(potoki)

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

Ć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.

Programowanie Proceduralne

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

Podstawy programowania w języku C++

1 Przetwarzanie plików

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

Transkrypt:

MATERIAŁY POMOCNICZE PODSTAWY PROGRAMOWANIA Na podstawie: Programowanie w C - Stworzone na Wikibooks, bibliotece wolny podręczników Funkcja getchar() Jest to bardzo prosta funkcja, wczytująca 1 znak z klawiatury. W wielu przypadkach dane mogą być buforowane przez co wysyłane są do programu dopiero, gdy bufor zostaje przepełniony lub na wejściu jest znak przejścia do nowej linii. Z tego powodu po wpisaniu danego znaku należy nacisnąć klawisz enter, aczkolwiek trzeba pamiętać, że w następnym wywołaniu zostanie zwrócony znak przejścia do nowej linii. Funkcja zwraca typ int int getc(file *stream); Gdy nastąpił błąd lub nie ma już więcej danych funkcja zwraca wartość EOF (która ma jednak wartość logiczną 1 toteż zwykła pętla while (getchar()) nie da oczekiwanego rezultatu): int main(void) int c; while ((c = getchar())!=eof) if (c==' ') c = '_'; putchar(c); Funkcja gets Funkcja gets służy do wczytania pojedynczej linii. Przyjmuje ona jeden argument adres pierwszego elementu tablicy, do którego należy zapisać odczytaną linię. Z tego powodu nie ma żadnej możliwości przekazania do tej funkcji rozmiaru bufora podanego jako argument. Podobnie jak w przypadku scanf() może to doprowadzić do przepełnienia bufora, co może mieć tragiczne skutki. Zamiast tej funkcji należy używać funkcji fgets(). char *gets(char *str); Funkcja gets() czyta linię ze standardowego wejścia (usuwa ją stamtąd) i umieszcza ją w tablicy znakowej wskazywanej przez str. Ostatni znak linii (znak nowego wiersza - '\n') zastępuje zerem (znakiem '\0'). Funkcja fgets

Funkcja fgets() jest bezpieczną wersją funkcji gets(), która dodatkowo może operować na dowolnych strumieniach wejściowych. Jej użycie jest następujące: fgets(tablica_znaków, rozmiar_tablicy_znaków, stdin); int main(void) char buffer[128], whole_line = 1, *ch; while (fgets(buffer, sizeof buffer, stdin)) /* 1 */ if (whole_line) /* 2 */ putchar('>'); if (buffer[0]!='>') putchar(' '); fputs(buffer, stdout); /* 3 */ for (ch = buffer; *ch && *ch!='\n'; ++ch); /* 4 */ whole_line = *ch == '\n'; if (!whole_line) putchar('\n');

Czytanie i pisanie do plików Nazwy funkcji z pierwszej grupy zaczynają się od litery f (np. fopen(), fread(), fclose()), a identyfikatorem pliku jest wskaźnik na strukturę typu FILE. Owa struktura to pewna grupa zmiennych, która przechowuje dane o danym pliku jak na przykład aktualną pozycję w nim. Szczegółami nie musisz się przejmować, funkcje biblioteki standardowej same zajmują się wykorzystaniem struktury FILE, programista może więc zapomnieć, czym tak naprawdę jest struktura FILE i traktować taką zmienną jako uchwyt, identyfikator pliku. Dane znakowe #include <stdlib.h> int main () FILE *fp; /* używamy metody wysokopoziomowej */ /* musimy mieć zatem identyfikator pliku, uwaga na gwiazdkę! */ char tekst[] = "Hello world"; if ((fp=fopen("test.txt", "w"))==null) printf ("Nie mogę otworzyć pliku test.txt do zapisu!\n"); exit(1); fprintf (fp, "%s", tekst); /* zapisz nasz łańcuch w pliku */ fclose (fp); /* zamknij plik */ Funkcja fopen zwraca wskaźnik do struktury *FILE w przypadku poprawnego otwarcia pliku, bądź też NULL, gdy plik nie może zostać otwarty. Po zakończeniu korzystania z pliku należy plik zamknąć. Robi się to za pomocą funkcji fclose. Pliki a strumienie Do zapisu do pliku używamy funkcji fprintf, która wygląda bardzo podobnie do printf jedyną różnicą jest to, że w fprintf musimy jako pierwszy argument podać identyfikator pliku. Podobnie jak scanf i fscanf. W rzeczywistości język C traktuje tak samo klawiaturę i plik są to źródła danych, podobnie jak ekran i plik, do których można dane kierować PLIKI NAZYWAMY STRUMIENIAMI Każdy program w momencie uruchomienia otrzymuje od razu trzy otwarte strumienie: stdin (wejście) stdout (wyjście) stderr (wyjście błędów) (aby z nich korzystać należy dołączyć plik nagłówkowy stdio.h)

fprintf (stdout, "Hej, ja działam!") = printf ("Hej, ja działam!"); fscanf (stdin, "%d", &zmienna) = scanf("%d", &zmienna); Przykład: printf("wcisnij Ctrl+D+Enter lub Ctrl+Z+Enter aby zakonczyc\n"); while ( (c = fgetc(stdin))!= EOF) fputc (c, stdout); fputc (c, fp); fclose(fp); Rozmiar pliku Dzięki standardowym funkcjom języka C możemy m.in. określić długość pliku. Do tego celu służą funkcje fsetpos, fgetpos oraz fseek. Ponieważ przy każdym odczycie/zapisie z/do pliku wskaźnik niejako przesuwa się o liczbę przeczytanych/zapisanych bajtów. Możemy jednak ustawić wskaźnik w dowolnie wybranym miejscu. int fseek(file *file, long offset, int mode); Funkcja fseek ustawia pozycję w pliku file na offset w zależnośći od wartości argumentu mode. Jeśli mode jest równy zero, to offset liczony jest od początku. Jeśli 1, to offset przesuwany od aktualnej pozycji, a 2 przesuwany o offset od końca pliku (wskaźnik pliku jest przesuwany do pozycji będącej sumą rozmiaru pliku i parametru offset). Zwraca: Zero gdy funkcja wykonała się pomyślnie, w przypadku błędu wartość niezerowa. int fsetpos (FILE* file, fpos_t* pos); Funkcja fsetpos zmienia aktualną pozycję wskaźnika do pliku file na pos. Zwaraca: Zero gdy funkcja wykonała się pomyślnie, EOF w przypadku wystąpienia błędu, k int fgetpos (FILE* file, fpos_t* pos); Funkcja fgetpos umieszcza w pos aktualną pozycję wskaźnika do pliku file. Zwaraca: Zero gdy funkcja wykonała się pomyślnie, EOF w przypadku wystąpienia błędu int main (int argc, char **argv) FILE *fp = NULL; int dlugosc; if ((fp=fopen( plik.txt, "rb"))==null) printf ("Błąd otwarcia pliku: %s!\n", plik.txt ); return 1; fseek (fp, 0, SEEK_END); /* ustawiamy wskaźnik na koniec pliku */

Pliki binarne np: pliki graficzne fgetpos (fp, &dlugosc); printf ("Rozmiar pliku: %d\n", dlugosc); fclose (fp); Do zapisu : nagłówka pliku używana jest funkcja fprintf, tablicy do pliku używana jest funkcja fwrite. Do odczytu: nagłówka pliku używana jest funkcja fscanf, tablicy do pliku używana jest funkcja fread. size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream); Argumenty: ptr - wskaźnik na tablicę size - rozmiar elementu tablicy nitems - liczba elementów do zapisu stream - plik, na którym wykonywana jest operacja Opis Funkcja fwrite kopiuje nitems elementów z poddanej tablicy do pliku. Kopiowanie kończy się w przypadku wystąpienia błędu lub po skopiowaniu podanej liczby elementów. Wskaźnik pliku jest przesuwany, tak by wskazywał pierwszy element po ostatnim zapisanym. Wartość zwracana Liczba faktycznie zapisanych elementów. size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream); Argumenty: ptr - wskaźnik na tablicę size - rozmiar elementu tablicy nitems - liczba elementów do odczytu stream - plik, na którym wykonywana jest operacja Opis Funkcja fread kopiuje nitems elementów z podanego pliku do tablicy. Kopiowanie kończy się w przypadku wystąpienia błędu, końca pliku lub po skopiowaniu podanej liczby elementów. Wskaźnik pliku jest przesuwany, tak by wskazywał pierwszy nieodczytany element. Wartość zwracana Liczba faktycznie wczytanych elementów. int main() const int dimx = 800; const int dimy = 800; int i, j; FILE * fp = fopen("first.ppm", "wb"); /* b - tryb binarny */ fprintf(fp, "P6\n%d %d\n255\n", dimx, dimy);

for(j=0; j<dimy; ++j) for(i=0; i<dimx; ++i) static unsigned char color[3]; color[0]=i % 255; /* red */ color[1]=j % 255; /* green */ color[2]=(i*j) % 255; /* blue */ fwrite(color,1,3,fp); fclose(fp); Inne przydatne funkcje: long ftell(file *file); Funkcja ftell zwraca aktualną pozycję wskaźnika pliku. //... - mamy otwarty plik i czytamy z niego dane long offset = ftell(file); // 'file' to nasz plik printf("pozycja w pliku: %d\n", offset); //... int feof(file *stream); Funkcja zwraca wartość niezerową jeżeli napotka koniec pliku tekstowego. int main() int i=0; int nr[32]; FILE *plik; plik=fopen("numery.txt", "r"); while (feof(plik)==0) fscanf(plik, "%d\n", &nr[i]); printf("%d %d\n", i+1, nr[i]); ++i; fclose(plik);