Biblioteka
#include <stdio.h>
Otwieranie i zamykanie pliku
FILE *fopen(const char *nazwapliku, const char *tryb); int fclose (FILE *plik);
Tryb: „r” - odczyt, „w” - zapis, „a” - dopisanie na końcu, „rb”, „wb” - odczyt i zapis pliku binarnego
Odczyt i zapis formatowany (plik tekstowy)
int fscanf(FILE *stream, const char *format, ...); int fprintf(FILE *plik, const char *format, ...);
Odczyt/zapis całej linii/łańcucha znakowego tekstu z/do pliku
char * fgets ( char * str, int num, FILE * stream ); int fputs ( const char * str, FILE * stream );
Odczyt i zapis (plik binarny)
size_t fread(void *wsk, size_t rozmiar, size_t ilosc, FILE *plik); size_t fwrite(const void *wsk, size_t rozmiar, size_t ilosc, FILE *plik);
Wykrywanie błędów (koniec pliku)
int feof(FILE *plik);
Więcej informacji o funkcjach biblioteki stdio.h
Przykład 1 - Czytanie sekwencji liczb z pliku
#include <stdio.h> int main() { FILE *plik; int liczba,i=0; plik = fopen("liczby.txt","r"); if (plik == NULL) { printf("Blad otwarcia pliku \"liczby.txt\"\n"); return 1; } printf("Ok. Zaczynam czytac plik:\n"); while(feof(plik) == 0) { fscanf(plik,"%d",&liczba); printf("%d => %d\n",i,liczba); i++; } fclose(plik); return 0; }
Rozszerz zestaw funkcji z poprzednich zajęć związanych z obsługą macierzy. Deklaracje funkcji dodaj do pliku nagłówkowego macierz.h
a definicje do pliku macierz.c
.
Zaimplementuj funkcję wczytaj_z_pliku, która tworzy macierz i wypełnia ją wartościami na podstawie informacji odczytanych z pliku tekstowego. Funkcja posiada trzy argumenty. Pierwszym jest strumień wejściowy (wskaźnik typu FILE*
do pliku otworzonego w trybie do odczytu). Drugi i trzeci argument to adresy zmiennych typu całkowitego pod którymi funkcja umieści odczytane z pliku rozmiary macierzy (odpowiednio ilość wierszy i ilość kolumn). Funkcja zwraca adres do macierzy float** wypełnionej wartościami wczytanymi z pliku lub wartość NULL
jeśli coś poszło nie tak jak powinno (np.: błąd alokacji pamięci, błąd odczytu pliku, itp.).
Zakładamy, że dane w strumieniu sformatowane są w następujący sposób: pierwsze dwie liczby całkowite określają liczbę wierszy i liczbę kolumn macierzy a następnie wyszczególnione są wszystkie elementy macierzy.
Przykładowo, sekwencja:
2 3 1.2 2.3 1.3 -3.1 4.0 1.1
reprezentuje macierz o 2 wierszach i 3 kolumnach postaci
1.2 | 2.3 | 1.3 |
-3.1 | 4.0 | 1.1 |
Przykładowe pliki z danymi znajduje się tutaj.
Dostępne na serwerze ferm
w katalogu /home/grochu/jpr/
.
FILE*
do pliku tekstowego otworzonego do zapisu), drugim argumentem jest adres macierzy (wskaźnik float **
). Trzecim i czwartym argumentem funkcji są wymiary macierzy (ilość wierszy i kolumn). baza_danych
(patrz zajęcia 8), tak aby na początku program wczytywał bazę danych z zapisanego wcześniej pliku tekstowego a na koniec program zapisywał do tego samego pliku aktualną zawartość bazy danych