Ι Ανασκόπηση και εμβάθυνση Μερικά πιο προχωρημένα θέματα. ΙΙ Τα αρχεία δεδομένων στη C

Σχετικά έγγραφα
Διάλεξη 18η: Διαχείρηση Αρχείων

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

Περιεχόμενα. Πρόλογος... 21

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

Ενδεικτική περιγραφή μαθήματος

Περιεχόμενα. Πρόλογος... 17

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

ιαφάνειες παρουσίασης #6 (β)

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Επεξεργασία Αρχείων Κειµένου

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διαδικασιακός Προγραμματισμός

Δομημένος Προγραμματισμός (ΤΛ1006)

H ΓΛΩΣΣΑ C. Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου. ηµήτρης Ψούνης

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Προγραμματισμός Ι (ΗΥ120)

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ερωτήσεις Επανάληψης

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Δομημένος Προγραμματισμός

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

FILE *fopen(const char *fname, const char *mode) void fclose(file *f) void fflush(file *f)

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Δομημένος Προγραμματισμός (ΤΛ1006)

Εργαστήριο 9: Αρχεία

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

Προγραμματισμό για ΗΜΥ

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΗΥ-150. Προγραμματισμός

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Δομημένος Προγραμματισμός

Προγραμματισμός Ι (ΗΥ120)

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στην γλώσσα προγραμματισμού C

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Μεθόδων Επίλυσης Προβλημάτων

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

ΗΥ-150. Προγραμματισμός

Ανάπτυξη και Σχεδίαση Λογισμικού

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραμματισμό

Η βασική συνάρτηση προγράμματος main()

Προγραµµατισµός Ι (ΗΥ120)

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραμματισμό

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

ΣΥΝΑΡΤΗΣΕΙΣ Εισαγωγή αρθρωτό ιεραρχική Προσοχή!

Προγραμματισμός Ι (HY120)

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

ΣΥΝΟΠΤΙΚΟΣ ΟΔΗΓΟΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

Η γλώσσα προγραμματισμού C

είκτες και Πίνακες (2)

Η γλώσσα προγραμματισμού C

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Στοιχειώδης προγραμματισμός σε C++

Διαδικασιακός Προγραμματισμός

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Προγραμματισμός I (Θ)

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

Διαδικαστικός Προγραμματισμός

Διαδικασιακός Προγραμματισμός

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Προγραμματισμός Ι (ΗΥ120)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 2 Ο. Εισαγωγή στην C Εντολές εξόδου Εντολές εισόδου Μορφοποιητές ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Η γλώσσα προγραμματισμού C Χειρισμός αρχείων

Επανάληψη για τις Τελικές εξετάσεις

Transcript:

Ι Ανασκόπηση και εμβάθυνση Μερικά πιο προχωρημένα θέματα ΙΙ Τα αρχεία δεδομένων στη C

Τελεστές αύξησης/μείωσης (++, --) Λειτουργία βάσει θέσης: ++x διάφορο του x++!!! Παράδειγμα 1 (postfix): Ισοδυναμεί με... int x = 0, y = 1; int x = 0, y = 1; x = y++; x = y; y=y+1; Τελικές τιμές: x = 1, y = 2. Παράδειγμα 2 (prefix): Ισοδυναμεί με... int x = 0, y = 1; int x = 0, y = 1; x =++ y; y=y+1; x = y; Τελικές τιμές: x = 2, y = 2. Παρόμοια και για τον τελεστή μείωσης (--)

Τελεστές αύξησης/μείωσης (++, --) Συνηθίζεται η χρήση τους σε συνδυασμό με άλλες εντολές. Παραδείγματα: Ισοδυναμεί με... if(x++ > 0) { if(x > 0) {...... } } x=x+1; if(++x > 0) { x=x+1;... if(x > 0) { }... } Για μεταβολή 1 υπάρχει μόνο postfix: x += y; <=> x = x+y; x -= y; <=> x = x-y; x *= y; <=> x = x*y; x /= y; <=> x = x/y;

Τελεστές αύξησης/μείωσης (++, --) Τα διάφορα πρότυπα της C δεν προβλέπουν τα πάντα. Επομένως, υπάρχουν απροσδιόριστες περιπτώσεις, με διαφορετική συμπεριφορά για κάθε μεταγλωττιστή. Συμβουλή: όχι παραφόρτωμα με τελεστές ++ ή -- Προσοχή στις πολύπλοκες εκφράσεις! Δυσνόητες Μπορεί να δίνουν άλλο από αυτό που νομίζουμε Προσοχή σε αριθμοδείκτες πίνακα! Από Kernighan & Pike The Practice of Programming : str[i++] = str[i++] = ' '; θέλουμε να δώσουμε την τιμή ' ' στα δύο επόμενα στοιχεία του str. Ανάλογα με το πότε ενημερώνεται το i, μπορεί να αφήσει μία θέση και το i να αυξηθεί μόνο κατά 1. Πιο καλά να σπάσει σε δύο: str[i++] = ' '; str[i++] = ' '; Άλλο κακό παράδειγμα: array[i++] = i; Μπορεί να αλλάξει πρώτα το i και μετά να γίνει η ανάθεση ή ανάποδα! Καλύτερα να σπάσει σε δύο, ανάλογα με το τι ακριβώς θέλουμε.

Οι παρακάτω εντολές: Σύνθετες Εντολές (if, for, while, do...while) if (...) ; for (...) ; while (... ) ; είναι συντακτικά σωστές! Αλλά, 99% λογικά λάθος (όχι αυτό που θέλουμε να κάνουμε) Ο τελεστής κόμμα - παράδειγμα του 1%. for(i=0; i<10; i++) γράφεται και for(i=0; i<10; i++, n++); n++; Τι κοινό έχουν τα παρακάτω; for(i=1; i >0; ) for( ; ; ) while ( 1 ) (ή κάτι άλλο 0) Υλοποιούν έναν ατέρμονο βρόχο. Μπορούμε να φύγουμε με break ή goto if(... ) break; if(... ) goto label;

Σύνθετες Εντολές (if, for, while, do...while) Έξοδος από πολλαπλό βρόχο: for ( i = 0; i < m; i++) { for ( j = 0 ; j < n; j ++) {... break;... } } Μας πάει από το εσωτερικό στο εξωτερικό for there: for ( i = 0; i < m; i++) { for ( j = 0 ; j < n; j ++) {... goto there;... } } printf( It is there!\n ); Έτσι βγαίνουμε και από τα δύο for Ή με κατάλληλο συνδυασμό δύο break

Συναρτήσεις μερικές παγίδες Σύνηθες λάθος: αδήλωτο όνομα ακολουθούμενο από παρενθέσεις, π.χ. y = energy(i); /* κάπου μέσα στο πρόγραμμα */ Ο compiler θα το εκλάβει ως όνομα συνάρτησης τύπου int! Συνάρτηση χωρίς δήλωση τύπου είναι int και όχι void. Πρέπει, ένα από τα δύο: τουλάχιστον το πρότυπο της συνάρτησης να προηγείται της main Τύπος Ονομα (τύπος1 παράμετρος1, τύπος2 παράμετρος2...) #include το κατάλληλο αρχείο επικεφαλίδας Άλλη μία πηγή σφαλμάτων: Αν δεν υπάρχουν παράμετροι πρέπει να γράφουμε τη λέξη void γιατί λόγοι συμβατότητας με παλιότερες εκδόσεις της C οδηγούν την κενή λίστα να εκλαμβάνεται ως δήλωση παλαιού τύπου και αναστέλλεται κάθε έλεγχος των ορισμάτων με αποτέλεσμα αυξημεη πιθανότητα λάθους κατά την ανάπτυξη του προγράμματος. Σημείωση για το #include: #include <όνομα.h> /* αρχείο πρότυπης βιβλιοθήκης */ #include"όνομα.h" /* αρχείο που δημιουργήσαμε εμείς */

Συναρτήσεις κατάταξη μεταβλητών Ως προς την εμβέλεια. - Τοπικές: δηλωμένες μέσα στη συνάρτηση (και... ακόμη πιο τοπικές, μέσα σε { και } ) Ορατές μόνο μέσα στη συνάρτηση (ή τα άγκιστρα). Χάνουν την τιμή τους με την έξοδο από την εμβέλειά τους - Εξωτερικές: δηλωμένες έξω από συναρτήσεις. Ορατές από όλες τις συναρτήσεις που ακολουθούν. Διατηρούν την τιμή τους από συνάρτηση σε συνάρτηση ΑΛΛΑ, τοπική μεταβλητή με ίδιο όνομα υπερβαίνει (overrides) την εξωτερική. Ως προς την κλάση αποθήκευσης. - Αυτόματες, (auto, προεπιλογή για όλες, άρα δε χρειάζεται αυτή η δήλωση) - Στατικές (static). Διατηρούν την τιμή τους ακόμη και αν είναι τοπικές. Αόρατες από άλλα αρχεία. - Καταχωρητή (register) Στο μικροεπεξεργαστή για ταχύτερη πρόσβαση και επεξεργασία Προσοχή! Tοπικές αυτόματες πριν την αρχικοποίηση περιέχουν σκουπίδια Στατικές και εξωτερικές αρχικά είναι μηδέν.

Συναρτήσεις πέρασμα παραμέτρων Πέρασμα μέσω τιμής (by value) αν δε θέλουμε να αλλάξουμε τα ορίσματα int absdiff(int x, int y) { int x, m = 3, n = 2; if(x > y)... return(x-y); x = absdiff(m,n); else printf("m=%d, n=%d, m-n =%d", m, n, x); return(y-x);... } Θα τυπώσει: m=3, n=2, m-n =1 Πέρασμα με διεύθυνση ή αναφορά (by reference) για να αλλάξουμε τα ορίσματα int altadd(int *x, int *y) { int x, m = 3, n = 2; (*x)++;... (*y)--; printf("m=%d, n=%d\n); return(*x+*y); x = altadd(&m, &n); } printf("m=%d, n=%d, m+n=%d\n",m,n,x); Θα τυπώσει: m=3, n=2 m=4, n=1, m+n=5 Eπιτρέπεται κάθε παράμετρος να περνά με διαφορετικό τρόπο.

Συναρτήσεις πέρασμα παραμέτρων 1. Eπιτρέπεται κάθε παράμετρος να περνά με άλλο τρόπο. void func(int x, int *y); func(a, &b); 2. Οι πίνακες περνάνε μέσω διεύθυνσης (όνομα πίνακα συνώνυμο με δείκτη στο στοιχείο [0]) void func(int *);... int x[10]={1}; func(x); 3. Και... συναρτήσεις περνάνε μέσω διεύθυνσης (όνομα συνάρτησης συνώνυμο με δείκτη σε αυτή) και έτσι, πάμε στους δείκτες σε συναρτήσεις...

Δείκτες σε συναρτήσεις Κάθε συνάρτηση έχει διεύθυνση (την αρχή της περιοχής όπου αποθηκεύεται). Η διεύθυνση μπορεί να αποθηκευτεί. Άρα, μπορεί να οριστεί δείκτης σε συνάρτηση Τύπος (*όνομα_δείκτη) ( ); Παρενθέσεις απαραίτητες λόγω προτεραιότητας (αλλιώς θα οριζόταν συνάρτηση που επιστρέφει Τύπος*) Όπως και με τους πίνακες: το όνομα της συνάρτησης είναι συνώνυμο με τη διεύθυνσή της. Έστω η συνάρτηση int intfc(int a, int b, int (*Func) ( )); Βάσει προηγουμένων, μπορώ να περάσω συναρτήσεις ως το τρίτο όρισμα, π.χ. intfc(x, y, somefunction); intfc(a, b, someotherfunction); Επιτρέπονται και πίνακες δεικτών σε συναρτήσεις: void (*fptr[ ]) = {func1, func2, func3};

Διάφορα Εντολές πολλαπλής ανάθεσης. Η ανάθεση x = y; είναι και παράσταση με τιμή την τελική τιμή του x. Τότε, μπορούμε να γράψουμε x = y = z = a; γιατί σημαίνει (x = (y = (z = a))); Μετατροπή τύπου (type casting) τύπος1 Α; τύπος2 Β; Α = (τύπος1) Β; Παράδειγμα: πραγματική διαίρεση ακεραίων. int m = 2, n = 3; float x; x = ( (float) m ) / ((float) n); Παραστάσεις ως λογικές συνθήκες: Ο,τι επιστρέφει 0 (int, long κλπ), 0. (float, double κλπ), NULL ή '\0' = ΨΕΥΔΗΣ Διαφορετικά, ΑΛΗΘΗΣ

Διάφορα Είσοδος/Έξοδος για ένα χαρακτήρα putchar getchar γνωστή... η συμμετρική αυτής. (διαβάζει από πληκτρολόγιο) Πάγωμα προγράμματος printf("\npress any key...") /* κάποιο μήνυμα */ getchar( ); /* περιμένει οποιοδήποτε χαρακτήρα */ Ορίσματα της main int main (int argc, char **argv) ή int main(int argc, char *argv[ ]) Επιστρεφόμενη τιμή προς το σύστημα εξ ου και return 0; στο τέλος. argc >= 1 argv[0] = όνομα εκτελέσιμου argv[1], argv[2],... argv[argc+1] = ορίσματα γραμμής εντολών

Προεπεξεργαστής #include γνωστή... #define, #ifdef, #ifndef, #undef, #endif χρήσιμες! #define LALA 25 όπου υπάρχει LALA στο πρόγραμμα, αντικαθίσταται από 25, πριν τη μεταγλώττιση. #define SIZE(x) sizeof(x) / sizeof(x[0]) χρήσιμη μακροεντολή για μέγεθος πίνακα Έστω αρχείο something.h #ifndef SOMETHING_H (αν δεν έχει οριστεί αυτή η συμβολική σταθερά) #define SOMETHING_H (όρισέ την)... (δήλωσε τις συναρτήσεις που θέλεις κλπ) #endif (τέλος του if) για να αποφύγουμε πολλαπλά include του ίδιου αρχείου σε μεγάλους κώδικες με πολλά αρχεία. Αν είναι ήδη defined η συμβολική σταθερά, τότε δε θα διαβάσει το υπόλοιπο αρχείο.

Αρχεία Το γενικό πλαίσιο: data stream (ρεύμα δεδομένων). stdin, stdout, stderr data stream ως προς τα δεδομένα βάσει προσπέλασης κειμένου σειριακά text files serial access αποθηκευμένα αρχεία δυαδικά binary files... τυχαίας προσπέλασης random access Αρχεία κειμένου: δεδομένα τύπου char Δυαδικά: δεδομένα όπως ακριβώς αναπαρίστανται στη μνήμη του ΗΥ Τρόπος προσπέλασης:

Αρχεία Τι είναι αρχείο; Λογικά οργανωμένη πληροφορία αποθηκευμένη σε μαγνητικά μέσα. Ουσιαστικά, bytes οργανωμένα με κάποιο τρόπο. Ποιον ακριβώς; Πιθανά περιεχόμενα ενός αρχείου κειμένου : bytes χωρισμένα από '\n' 'K' 'o' 'z' 'a' 'n' 'i' '\n' 'I' 'o' 'a' 'n' 'n' 'i' 'n' 'a' '\n''a' 't' 'h' 'i' 'n' 'a' '\n''t' 'h' 'e' Μπορούμε να τα δούμε και έτσι: 'K' 'o' 'z' 'I' 'o' 'a' 'A' 't' 'h' 'T' 'h' 'e' 'a' 'n' 'i' 's' 'n' 'n' 'n' 's' 'i' 'i' 'a' 'a' '\n' 'n' '\n' 'a' 'o' '\n' Γραμμές = εγγραφές. Ξεχωρίζουν με '\n' Τελευταίο byte: EOF = End Of File 'l' 'n' 'i' 'k' 'i' EOF Από το stdio.h /* End of file character. Some things throughout the library rely on this being -1. */ #ifndef EOF # define EOF (-1) #endif

Αρχεία Πώς θα μπορούσαμε να χειριστούμε το προηγούμενο αρχείο; Τύπος FILE - τα αρχεία ορίζονται ως δείκτες, π.χ. FILE *f1, *f2, f3; Άνοιγμα αρχείων. f1 = fopen("arxeio1", "r"); f2 = fopen("arxeio2", "w"); f3 = fopen("arxeio3", "a"); "read", για ανάγνωση "write", για εγγραφή (αν προϋπάρχει, σβήνονται τα προηγούμενα!) Προκαθορισμένος τύπος: κειμένο. Για δυαδικά: κωδικός "b", π.χ. fp = fopen("arxeio", "wb"); Κλείσιμο αρχείων: int fclose (FILE *); π.χ. fclose(f1) κλπ "append", για προσθήκη δεδομένων χωρίς να σβήνει τα υπάρχοντα. Σημείωση: stdin, stdout = σταθερές τύπου FILE*

Αρχεία Ανάγνωση και εγγραφή χαρακτήρων. int fgetc(file* f) int getchar( void ) int getc (FILE* f) getchar( ) <=> fgetc( stdin ) int fputc(int c, FILE *f); int putc (int c, FILE *f); int putchar(int c); putchar (c) <=> fputc(c, stdin); Παραδείγματα: FILE *fp=fopen("file1", "r");... while((c = fgetc(fp))!= EOF) putchar(c);... fclose(fp); FILE *gp=fopen("file2", "w");... while((c = getchar( ))!= '\n') fputc(c, gp);... fclose(gp);

Αρχεία Ανάγνωση και εγγραφή αλφαριθμητικών. int fprintf(file* f, const char *format,...); int printf(const char*format,...); int fscanf(file* f, const char *format,...); int scanf(const char *format,...); Το format επιτρέπει καταχώρηση εγγραφών σταθερού μήκους. Εγγραφές ποικίλου μήκους με τερματικό byte '\n' αναγκαστικά, σειριακά Εγγραφές σταθερού μήκους επιτρέπουν άμεση προσπέλαση κάθε εγγραφής Πώς; int fseek(file *fp, long int offset, int flag); μετατοπίζει κεφαλή κατά offset bytes όπου flag #define SEEK_SET 0 (σε σχέση με την αρχή του αρχείου) #define SEEK_CUR 1 (σε σχέση με τρέχουσα θέση) #define SEEK_END 2 (σε σχέση με το τέλος του αρχείου) Επίσης, int fputs(const char*s, FILE *f); char *fgets(char*s, int n, FILE *f); int puts(const char *s); char *gets(char*s);