Το πρόγραμμα που βρίσκεται στο αρχείο READCHAR.C διαπραγματεύεται την
αντίστροφη λειτουργία από αυτή που μόλις περιγράφηκε, δηλαδή την ανάγνωση
χαρακτήρων από ένα αρχείο. Οι δηλώσεις είναι ελάχιστες: ο δείκτης απομονωτή
αρχείου funny και μιά μεταβλητή χαρακτήρα c.
Το πρώτο ενδιαφέρον σημείο βρίσκεται στο έλεγχο ύπαρξης του αρχείου προς
ανάγνωση. Όταν ανοίγουμε ένα αρχείο γιά διάβασμα ή επέκταση τέτοιος
έλεγχος δεν απαιτείται γιατί το σύστημα δημιουργεί το αρχείο αν δεν υπάρχει.
Αν όμως ανοίγουμε ένα αρχείο αποκλειστικά γιά ανάγνωση τότε η ύπαρξή του
πρέπει να πιστοποιηθεί πριν προχωρήσουμε στο πρόγραμμα. Έτσι η τιμή του
δείκτη funny, δηλαδή η διέυθυνση του απομοωτή ελέγχεται. Εάν αυτή έχει
μηδενική (NULL) τιμή τότε το πρόγραμμα διακόπτεται με μήνυμα λάθους.
Το κύριο μέρος του προγράμματος είναι μιά επανάληψη do-while που διαβάζει
έναν χαρακτήρα από το αρχείο και τον εμφανίζει στην οθόνη. Η συνάρτηση
ανάγνωσης χαρακτήρα είναι η getc που βρίσκεται σε αντιστοιχία με την getch ή
την getchar χωρίς την περιπλοκή του απομονωτή πληκτρολογίου του DOS. Η
δήλωση προτύπου είναι
int getc(FILE *ioptr);
με τον χαρακτήρα να επιστρέφεται με return. Ο τερματισμός της επανάληψης
επιτυγχάνεται με την ανάγνωση του ειδικού χαρακτήρα τέλους του αρχείου (End
Of File, EOF) που ορίζεται στο αρχείο κεφαλή STDIO.H και συνήθως αντιστοιχεί
στην ακέραια τιμή -1.
ΠΡΟΣΟΧΗ: Ο τύπος char επιτρέπει έχει εύρος τιμών από το -128 έως το 127 και
μπορεί να αναπαραστήσει το -1. Η χρήση του τύπου unsigned char ή unsigned
int δεν επιτρέπει την ορθή παράσταση του -1 και εμποδίζει τον έλεγχο του EOF.
Η εκτέλεση του προγράμματος εμφανίζει τα περιεχόμενα του αρχείου
TENLINES.TXT στην οθόνη.
This is an example line. Line number 1
This is an example line. Line number 2
This is an example line. Line number 3
This is an example line. Line number 4
This is an example line. Line number 5
This is an example line. Line number 6
This is an example line. Line number 7
This is an example line. Line number 8
This is an example line. Line number 9
This is an example line. Line number 10
Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.
|