Γράψιμο σε αρχείο ανά χαρακτήρα

Το προηγούμενο παράδειγμα αφορούσε στο διαμορφωμένο γράψιμο σε ένα 
αρχείο. Όπως είναι αναμενόμενο υπάρχουν συναρτήσεις που επιτρέπουν γράψιμο 
ανά χαρακτήρα, σε αντιστοιχία με τις σχετικές συναρτήσεις που αναφερόταν 
στην οθόνη. Το πρόγραμμα του αρχείου CHAROUT.C παρουσιάζει ένα 
παράδειγμα. 

Οι δηλώσεις του προγράμματος είναι εύλογες: ορίζεται ένα αρχείο με δείκτη 
απομονωτή με όνομα point, ένας πίνακας χαρακτήρων 35 θέσεων με όνομα 
others και δύο μετρητές, indexer και count. Ο πίνακας χαρακτήρων 
αρχικοποιείται με μιά συμβολοσειρά μέσω της συνάρτησης strcpy. Ανοίγουμε το 
αρχείο TENLINES.TXT γιά επέκταση (χρήση "a"), επομένως ότι γράψουμε θα 
προστεθεί στο τέλος του ήδη υπάρχοντος κειμένου. Προσέξτε οτι η συμβολοσειρά 
του ονόματος διαδρομής του αρχείου χρησιμοποιεί τις συμβάσεις του DOS 
δηλαδή δεν ξεχωρίζει καφαλαία και πεζά. Σε άλλα λειτουργικά συστήματα, όπως 
στο Unix, θα έπρεπε να είμαστε πιό προσεκτική με τα ονόματα των αρχείων.

Το σημαντικό μέρος του προγράμματος είναι η διπλή επανάληψη for. H 
εξωτερική επενάληψη ορίζει τον αριθμό των γραμμών που θα προστεθούν (10 
γραμμές) ενώ η εσωτερική επανάληψη γράφει τη συμβολοσειρά του  πίνακα 
others στο αρχείο, χαρακτήρα προς χαρακτήρα. Η συνθήκη τερματισμού της 
εσωτερικής επανάληψης αναζητά τον μηδενικό χαρακτήρα στο τέλος της 
συμβολοσειράς. Είναι προφανές οτι η ίδια επανάληψη θα μπορούσε να γραφτεί με 
τη βοήθεια δεικτών. 
                                       
Το σώμα της εσωτερικής επανάληψης είναι η νέα συνάρτηση putc η οποία 
προφανώς αντιστοιχεί στην putchar. Η δήλωση προτύπου είναι

int putc(char c, FILE *ioptr);

όπου η ακέραια τιμή που επιστρέφεται είναι ο χαρακτήρας c που γράφεται ή το -
1 σε περίπτωση λάθους. Επομένως μπορούμε να πούμε οτι 

η κλήση putchar(c) αντιστοιχεί με τη κλήση putc(c, stdout);

Προσέξτε οτι ενώ στη fprintf ο δείκτης του απομονωτή αρχείου είναι πρώτη 
παράμετρος στη putc ο ίδιος δείκτης είναι δεύτερη παράμετρος. Το γιατί είναι 
γνωστό μόνο στους σχεδιαστές της C.

Με τη λήξη της εσωτερικής επενάληψης, δηλαδή στο τέλος της συμβολοσειράς 
γράφεται και ένας χαρακτήρας αλλαγής γραμμής putc('\n',point). Συνολικά 
οι δύο επαναλήψεις θα μπορούσαν να γραφούν απλούστερα ως

for (count = 1;count <= 10;count++)
   fprinf("%s\n", others);

αλλά τότε πως θα δείχναμε τη χρήση της putc; 

Το αποτέλεσμα της εκτέλεσης του προγράμματος εγγράφεται στο τέλος του 
αρχείου TENLINES.TXT και φαίνεται παρακάτω

Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.
Additional lines.

Σημειώστε οτι κάθε φορά που εκτελείται το πρόγραμμα προστίθενται 10 γραμμές 
στο αρχείο TENLINES.TXT, αφού αυτό ανοίγεται γιά επέκτεαση. Αντίθετα, στο 
προηγούμενο πρόγραμμα το αρχείο TENLINES.TXT ανοίγεται γιά γραψιμο, άρα 
όσες φορές και άν το τρέξουμε θα έχουμε το ίδιο αρχείο των 10 γραμμών. Μη 
διαγράψετε το αρχείο γιατί θα χρησιμοποιηθεί παρακάτω.

Περιεχόμενα Κεφαλαίου