1 / 13

Programski jezik C

Programski jezik C. Delo z datotekami (formatirano, neformatirano) knjižnice, C-jev predprocesor, krmiljenje zaslona. Vhodno izhodne operacije. V datoteki stdio.h so definirani:

candra
Download Presentation

Programski jezik C

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programski jezik C Delo z datotekami (formatirano, neformatirano) knjižnice, C-jev predprocesor, krmiljenje zaslona

  2. Vhodno izhodne operacije • V datoteki stdio.h so definirani: • kazalci na datoteke (FILE): stdin, stdout, stderr NULL (ki je enak 0) EOF (ki je enak -1) FILE (ki je typedef za podatkovno strukturo) Funkcije s standardnim vhodom, izhodom: int printf (format [,arg, arg,..arg])  Formatiran izpis na standardni izhod  int scanf (format [,kazalec, kazalec, ..])  Formatirano branje s standardnega vhoda  int getchar( )  Branje znaka s standardnega vhoda  int putchar ( int )  Izpis znaka na standarni izhod  char *gets( char str[80]) Branje niza s standardnega vhoda  (nevarna, nevarna) char *puts( char str[80])  Izpis niza na standardni izhod

  3. Delo z datotekami • Odpiranje datoteke • Primer: • Odprimo za branje datoteko z imenom datoteka. • FILE *fd ; fd = fopen("datoteka", "r"); • Najprej smo morali definirati kazalec fd, ki ga bomo kasneje uporabljali pri vseh operacijah z odprto datoteko. Temu kazalcu pravimo "opisnik datoteke" (file descriptor). Drugi parameter v klicu funkcije fopen je v danem primeru "r", zato bo datoteka odprta za branje. • Seznam vseh možnosti • "r"  Odpri datoteko za branje  • "w"  Odpri datoteko za pisanje. Če je še ni, jo tvori, če je že, jo povozi  • "a"  Odpri datoteko za pisanje. Če je še ni, jo tvori, sicer dodajaj na konec.  • "r+"  Datoteka bo odprta za branje in pisanje  • "w+" Datoteka bo odprta za branje in pisanje”  • "a+"  Datoteka bo odprta za branje in pisanje  Zapiranje datoteke fclose (fd);

  4. Branje iz datoteke... Zapis v datoteko Pri navedbi možnih funkcij predpostavimo, da smo deklarirali dva kazalca na datoteki (fp1 in fp2), en niz (s) in eno spremenljivko tipa char: FILE  *fp1, *fp2;   /* kazalca na datoteki */char *s                /* kazalec na niz */int c;int size, n; Seznam funkcij za branje in zapis v datoteko:

  5. Primer: Kopiranjeenedatoteke v drugo #include < stdio.h >      /* Kopiranje datoteke */      void main() {          FILE *fp1,  *fp2;          int ch;          if ((fp1= fopen("inpFile", "r")) ==NULL) {              fprintf(stderr,"Datoteke ne morem odpreti");              exit (1);          }          fp2 = fopen ("outFile", "w");          while ( (ch = getc(fp1)) != EOF) putc(ch, fp2); fclose( fp1); fclose (fp2);          exit (0); } Branje datoteke (znak po znak) DEMO Branje –pisanje (znak po znak) DEMO Branje –pisanje (vrstico za vrstico) DEMO Branje (besedo za besedo) DEMO

  6. Naključno branje in pisanje datoteke • Pri naslednjih funkcijah uporabljamo spremenljivko tipa "long integer", ki predstavlja odmik (in torej položaj v datoteki), merjen v bytih •      FILE *fp; •      long odmik;      /* v datoteki */ •      int odkod ;        /* od kod se steje odmik  */ • Možne funkcije: • rewind (fp);  Postavi odmik na začetek datoteke  • fseek (fp, odmik, odkod);  • Drugi parameter -odmik -pove, od kod dalje bo sledili branje ali zapis v datoteko.  Tretji parameter ima lahko eno od vrednosti: • SEEK_SET .... Začetek datoteke  • SEEK_CUR.....Trenutni položaj v datoteki  • SEEK_END......Konec datoteke  • odmik = ftell (fp);  Dobimo trenutni položaj (odmik) v datoteki  DEMO

  7. Preostale funkcije za delo z datotekami ferror (fp)  Vrne TRUE , če je indikator napake za dani (datotečni) tok (stream) setiran (zaradi neuspele predhodne vh/izh operacije)  feof (fp)  Vrne TRUE, če želimo brati po koncu datoteke  clearerr (fp)  Resetira indikatorja vh/izh napake in konca datoteke  fflush (fp)  Sistem zapisuje podatke v datoteko preko medpomnilnika. Ta funkcija forsira prepis podatkov iz medpomnilnika v datoteko.  char buffer [BUFSIZ] setbuf (fp, bufer) Sami zagotovimo polje za medpomnilnik.BUFSIZ je definiran v stdio.h . Če namesto naslova polja buffer navedemo (char *) NULL, bo do operacije brez medpomnilnika (unbuffered) 

  8. ASCII koda: ‘3’ = 00110011 = 033 (hex) = 51(dec) ‘5’ = 00110101 = 035 (hex) = 53(dec) Formatiran, neformatiran vhod-izhod • Formatiranizhod • •Podatki pretvorjeni v ASCII neodvisno od vhodnega formata • Neformatiran izhod • •Zapis na disk brez konverzije ( koda takšna, kot je) neformatirano int x = 3 Int y = 5 ‘3’ ‘5’ formatirano Demo1

  9. Primer binarnega pisanja in branja Preprost primer binarnega pisanja in branja Bolj resen primer binarnega pisanja in branja Binarno pisanje DEMO Binarno Branje DEMO

  10. Neformatirano pisanje intfwrite(void*ptr, intsize, intnum_items, FILE *fp); #include <stdio.h> structkarta { int vrednost; char barva; }; intmain(void){ structkartapaket[] = { {2,'s'}, {7,‘k'}, {8,'c'}, {2,'s'}, {2,'h'} }; FILE *fp= fopen("unformated", "wb"); printf("%d", sizeof(struct karta) ); fwrite(paket, sizeof(struct karta), 5, fp);/* ta dva stavka naredita isto */ fwrite(paket, 1, sizeof(struct karta)*5, fp); /* ta dva stavka naredita isto */ fclose(fp); }

  11. Neformatirano branje intfread(void*ptr, intsize, intnum_items, FILE *fp); #include <stdio.h> structkarta { int vrednost; char barva; }; Intmain(void){ structkartapaket[10]; FILE *fp= fopen("unformated", "rb"); fread(paket, sizeof(struct karta), 10, fp);/* beremo 2 * 5 kart */ fclose(fp); printf(“vrednost= %d, barva = %c\n", paket[6].vrednost, paket[6].barva ); } DEMO

  12. Formatirano pisanje datoteke Zapis 10 števil v datoteko stevila.txt #include <stdio.h> #define MAX 10 int main() { FILE *f; int x; f=fopen(“stevila.txt","w"); if (!f) return 1; for(x=1; x<=MAX; x++) fprintf(f,"%d\n",x); fclose(f); return 0; }

  13. Formatirano branje datoteke Branje vrstic v datoteki in izpis na zaslon pesmica.txt #include <stdio.h> int main() { FILE *f; char s[1000]; f=fopen(“pesmica.txt","r"); if (!f) return 1; while (fgets(s,1000,f)!=NULL) printf("%s",s); fclose(f); return 0; } Demo

More Related