Ανάγνωση από αρχείο ανά λέξη |
Είναι προφανώς αναμενόμενο οτι θα πρέπει να υπάρχει και η συνάρτηση fscanf σε αντιστοιχία της scanf. Το πρόγραμμα που είναι αποθηκευμένο στο αρχείο READTEXT.C αποτελεί ένα πρώτο παράδειγμα εφαρμογής της. Το πρόγραμμα είναι σχεδόν ίδιο με το προηγούμενο με τη διαφορά οτι αντί γιά ανάγνωση ανά χαρακτήρα c έχουμε ανάγνωση ανά λέξη oneword. Ο έλεγχος ύπαρξης του αρχείου TENLINES.TXT παραλείπεται γιά λόγους συντομίας. Η δήλωση προτύπου της fscanf έχει τη μορφή int fscanf(FILE *ioptr, char *format_string [, argument ...]); Η τιμή που επιστρέφει η fscanf αντιστοιχεί με τον αριθμό των επιτυχημένων σαρώσεων. Η τιμή 0 σημαίνει οτι η τελευταία σάρωση είναι ανεπιτυχής ενώ η τιμή -1 σημαίνει οτι η τελευταία σάρωση συνάντησε το τέλος του αρχείου (EOF). Προφανώς ισχύει οτι οι κλήσεις scanf("...", ...); και fscanf(stdin, "...", ...); είναι ισοδύναμες. Η εκτέλεση του προγράμματος μας επιφυλάσσει μιά μικρή έκπληξη. Η τελεταία λέξη πριν από το τέλος του αρχείου γράφεται δύο φορές. This is an example line. Line number 1 This is an ... (Many other lines) ... Additional lines. Additional lines. lines. Τι έχει συμβεί; Ο χαρακτήρας του τέλους αρχείου αναγνωρίζεται ως ξεχωριστή μεν λέξη αλλά δεν 'γράφεται' στη συμβολοσειρά oneword ούτε αντιγράφεται στην οθόνη. Στη θέση του ξαναγράφεται η τελευταία λέξη που είχε διαβαστεί. Σε ορισμένους μεταφραστές γράφεται μιά κενή γραμμή, δηλαδή μιά αρχικοποιημένη (άδεια) συμβολοσειρά. Επομένως όταν διαβαστεί το EOF αυτό δεν πρέπει να γραφτεί στην οθόνη (ή σε όποιο άλλο αρχείο). Η βελτιωμένη έκδοση δίνεται στο πρόγραμμα του αρχείου READGOOD.C. |
![]() |
![]() |
![]() |