Ασφαλής εισαγωγή στην C ++

Στα προγράμματα σας μπορεί να χρειαστεί να ζητήσετε πληροφορίες από το χρήστη. Στην C ++ οι πληροφορίες συλλέγονται χρησιμοποιώντας το αντικείμενο "cin". Εάν δεν διασφαλίζετε αυτές τις εισροές, τότε το πρόγραμμά σας πιθανόν να είναι θύμα μιας "υπερχείλισης buffer". Πράγματι, εάν ο αριθμός των χαρακτήρων που εισάγονται υπερβαίνει το αρχικά προγραμματισμένο μέγεθος προσωρινής μνήμης, τότε τα τελευταία δεδομένα αντικαθιστούν άλλα δεδομένα στη στοίβα και τα λανθασμένα δεδομένα επηρεάζουν τους καταχωρητές ESP και EBP.

Μπορείτε να εξασφαλίσετε αυτές τις πληροφορίες εισαγωγής με διαφορετικούς τρόπους.

Χρησιμοποιώντας τη μέθοδο get ()

 #include int κύρια () {char texte [100]; cin.get (κείμενο, 100); // premier paramètre: la où va la saisie δεύτερο: taille max de saisie επιστροφή 0? }} 

Αυτό το παράδειγμα απεικονίζει τη χρήση του cin.get.

Αν το κείμενο που πληκτρολογήσατε υπερβαίνει το διαθέσιμο μέγεθος, οι επιπλέον χαρακτήρες παραβλέπονται.

Χρησιμοποιώντας τη μέθοδο "getline ()"

Αυτή η μέθοδος λειτουργεί σαν get (), αλλά αφαιρεί τον χαρακτήρα στο τέλος του buffer.

Πράγματι, για την επικύρωση ενός κειμένου, ο χρήστης πιέζει το πλήκτρο "Enter", το οποίο αντιστοιχεί στον χαρακτήρα ' \ n '.

Το getline () καταργεί αυτόν τον χαρακτήρα.

== Δεν λειτουργεί !! ===

Εδώ είναι ένας κώδικας που δεν λειτουργεί σωστά:

 #include using namespace std; int main () {char entree [100]; int choix; cout <> choix. cout << "Entrez un texte:"; cin.get (κείμενο, 100); cout << "Οι σειρές τελειώνουν!"; επιστροφή 0? }} 

Πράγματι, η δεύτερη εγγραφή δεν εκτελείται και εμφανίζεται το μήνυμα "Input done! / Saisies terminées!" ".

Πώς να λύσετε αυτό το πρόβλημα;

Πρέπει να χρησιμοποιήσετε τη μέθοδο " ignore () ".

Η μέθοδος ignore ()

Αυτή η μέθοδος επιτρέπει να αγνοήσετε ορισμένους χαρακτήρες σε μια συμβολοσειρά.

 #include using namespace std; int main () {char entree [100]; int choix; cout <> choix. cout << "Entrez un texte:"; cin.ignore (1, '\ n'); / / ignore le caractère d'entrée, το οποίο έχει επιβεβαιωθεί. cin.get (κείμενο, 100); cout << "Οι σειρές τελειώνουν!"; επιστροφή 0? 

Με αυτήν τη μέθοδο, ο χαρακτήρας εισόδου αγνοείται και το πρόβλημα επιλύεται.

Προηγούμενο Άρθρο Επόμενο Άρθρο

Οι Καλύτερες Συμβουλές