Είσοδος συμβολοσειρών

Η συνάρτηση scanf μπορεί να χρησιμοποιηθεί γιά την ανάγνωση διαφόρων 
τύπων δεδομένων με βάση τα πεδία της συμβολοσειράς ελέγχου, σε αντιστοιχία 
με τα πεδία ελέγχου της συνάρτησης printf. Στο πρόγραμμα του αρχείου 
STRINGIN.C δίνεται ένα παράδειγμα εισαγωγής συμβολοσειρών. Η συμβολοσειρά 
δηλώνεται ως πίνακας big 25 θέσεων. Το κείμενο του προγράμματος είναι όμοιο 
με το κείμενο του προηγουμένου προγράμματος. Ως συνθήκη τερματισμού 
θεωρούμε την εισαγωγή του Χ στο μηδενική θέση της συμβολοσειράς. Να 
σημειωθεί ακόμη οτι το όνομα της συμβολοσειράς μπορεί να χρησιμοποιηθεί απ΄ 
ευθείας ως παράμετρος της scanf αφού αποτελεί όνομα δείκτη και άρα 
διεύθυνση.  

Η εκτέλεση του προγράμματος παρουσιάζει ορισμένες εκπλήξεις, εκτός από την 
ήδη συζητημένη απομονωμένη είσοδο. Διαπιστώνουμε οτι η scanf θεωρεί ως 
οριοθέτη συμβολοσειράς όχι μόνο τον χαρακτήρα CR αλλά και το κενό. Έτσι 
εάν σε μία σειρά έχουμε λέξεις χωρισμένες με κενό τότε αυτές αναγνωρίζονται 
ως ξεχωριστές συμβολοσειρές. Αυτό το γεγονός έχει και ένα επιπλέον 
αντίκτυπο. Ο χαρακτήρας τερματισμού Χ μπορεί να βρίσκεται οχι απαραίτητα 
στη μηδενική θέση της γραμμής (πρώτη στήλη της οθόνης) αλλά απλά στη 
μηδενική θέση οποιαςδήποτε λέξης στη γραμμή. Έτσι αν εισάγουμε 5 λέξεις με 
την τρίτη λέξη να ξεκινά με Χ τότε το πρόγραμμα αναγνωρίζει μόνο τις 3 
πρώτες. 

Τελικά ας σημειώσουμε οτι ο μηδενικός χαρακτήρας προστίθεται από τη scanf 
στο τέλος κάθε νόμιμης συμβολοσειράς. Αν όμως προσπαθήσουμε να εισάγουμε 
περισσότερους από 24 χαρακτήρες διαπιστώνουμε οτι το πρόγραμμα τους 
δέχεται. Τι έχει συμβεί; Η scanf και οι συναρτήσεις συμβολοσειρούν μοιάζουν να 
αγνοούν τη δήλωση του πίνακα χαρακτήρων και απλά να αναζητούν τον 
μηδενικό χαρακτήρα τερματισμού. Το σύστημα εκτέλεσης δεν ειδοποιεί γιά 
λάθος. Και πάλι είναι δουλειά του προγραμματιστή να ελέγχει το πρόγραμμά 
του.

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