C++ istream Λειτουργίες

C Istream Leitourgies



Ο όρος «ροή» στη C++ περιγράφει τη ροή των χαρακτήρων μεταξύ του νήματος του προγράμματος και του i/o. Απαιτούνται κλάσεις ροής C++ για την εισαγωγή και την έξοδο ενεργειών σε συσκευές και αρχεία IO. Αυτές οι κλάσεις έχουν σχεδιαστεί για να διαχειρίζονται την είσοδο και την έξοδο του προγράμματος και έχουν ιδιαίτερη λειτουργικότητα.

Ιεραρχία τάξης ροής

Μια κλάση C++ αποτελείται από μεθόδους που απαιτούνται για τη διαχείριση και τη διαχείριση των δεδομένων που περιέχει.

Το float, το doubles και οι κλάσεις είναι τύποι δεδομένων παρόμοιοι με το int. Μια μοναδική μεταβλητή με μια κλάση ως τύπο δεδομένων αναφέρεται ως αντικείμενο C++. Τα προκαθορισμένα ειδικά αντικείμενα «cin» και «cout» έχουν διάφορες κλάσεις ως τύπους δεδομένων.







Τα δεδομένα που γράφονται στο «cout» ή διαβάζονται από το «cin» είναι παραδείγματα ροών δεδομένων προς ή από προγράμματα σε C++. Επί του παρόντος, εξετάζουμε τις ακόλουθες τέσσερις κατηγορίες για αυτήν:



Μεταδώστε το
Οποιοσδήποτε σκοπός μπορεί να εξυπηρετηθεί από αυτήν τη ροή εισόδου. Μια απεικόνιση ενός istream είναι το cin.



Ostream
Είναι μια ροή εξόδου με πολλές χρήσεις. Τα Ostream έρχονται με τις μορφές cout και cin.





Αν ροή
Είναι μια ροή αρχείων εισόδου.

Του ρέματος
Είναι μια ροή αρχείων εξόδου. Η κληρονομικότητα είναι μια έννοια που χρησιμοποιείται σε μεγάλο βαθμό στον αντικειμενοστραφή προγραμματισμό, όπως στη C++, όπου ορισμένες κλάσεις παίρνουν τα χαρακτηριστικά άλλων κλάσεων που έχουν ήδη δημιουργηθεί. Οι προγονικές τάξεις στη συνέχεια γίνονται εξειδικεύσεις του εαυτού τους μέσω της συμπερίληψης νέων χαρακτηριστικών.



Αν κλάση ροής
Ένα ifstream μπορεί να αντιμετωπιστεί με τον ίδιο τρόπο όπως ένα istream, που είναι αυτό που είναι.

Της κατηγορίας stream
Με τον ίδιο τρόπο που λειτουργεί το ifstreams, αλλά με έξοδο αντί για είσοδο, ένα offstream είναι μια ροή αρχείου εξόδου. Ένα ofstream χρησιμοποιείται με τον ίδιο τρόπο όπως το cout μετά την κατασκευή, το άνοιγμα και την επαλήθευση ότι δεν υπάρχουν σφάλματα.

Ίος τάξη
Από αυτήν την τάξη, όλες οι κατηγορίες ροής κατέβηκαν. Οι ροές εισόδου και εξόδου είναι δύο διαφορετικοί τύποι.

Καθορίζει τα μέρη ροής που είναι ανεξάρτητα από την κατάσταση εισόδου ή εξόδου της ροής στη βάση ios.

Σε αντίθεση με τα μέλη που συζητούνται στη βάση ios, τα μέλη που εξαρτώνται από τις παραμέτρους του προτύπου περιγράφονται σε αυτό το μέρος.

Ροή (εισαγωγή)
Λόγω της πολυπλοκότητας της βιβλιοθήκης iostream, δεν θα μπορέσουμε να την καλύψουμε εξ ολοκλήρου σε αυτά τα μαθήματα. Ωστόσο, θα επισημάνουμε τις λειτουργίες που χρησιμοποιούνται περισσότερο. Σε αυτήν την ενότητα, θα εξετάσουμε την κλάση εισόδου από διάφορες οπτικές γωνίες (istream).

Μάθαμε ότι ο τελεστής εξαγωγής (>>) θα χρησιμοποιηθεί για τη λήψη των δεδομένων από μια ροή εισόδου.

ΡΕΥΜΑ

Στη γλώσσα προγραμματισμού C++, η ροή εισόδου διαχειρίζεται η κλάση istream. Η είσοδος διαβάζεται και γίνεται κατανοητή ως μια σειρά χαρακτήρων που χρησιμοποιούν αυτά τα αντικείμενα ροής εισόδου. Ο χειρισμός της εισόδου γίνεται από το cin.

Τάξεις μελών

istream::sentry
Μια κλάση που εκτελεί πολλές εργασίες και κάθε φορά εκτελείται μια διαδικασία εισαγωγής. Ο καταστροφέας του δεν απαιτείται να πραγματοποιήσει καμία ενέργεια. Ωστόσο, οι υλοποιήσεις μπορούν να εκτελέσουν πρόσθετες εργασίες εκκίνησης ή εκκαθάρισης στη ροή που μοιράζονται όλες οι λειτουργίες εισόδου χρησιμοποιώντας τη δημιουργία και την καταστροφή αντικειμένων φρουρών.

Λειτουργίες

istream::gcount
Δίνει τον αριθμό χαρακτήρων που λήφθηκε από την πιο πρόσφατη ενέργεια εισαγωγής χωρίς μορφοποίηση του αντικειμένου. Οι μη μορφοποιημένες διαδικασίες εισαγωγής — get, getline, ignore, peek, read, read some, putback και unget— αλλάζουν την τιμή που επιστρέφεται από αυτή τη συνάρτηση. Ωστόσο, έχετε κατά νου ότι η κλήση κρυφών κρυφών, ανατροπής ή unget δεν εξάγει κανέναν χαρακτήρα. Ως αποτέλεσμα, η καταμέτρηση θα επιστρέφει πάντα 0.

istream::get
Ο μεμονωμένος χαρακτήρας βγάζει έναν χαρακτήρα από τη ροή. Ο χαρακτήρας είτε ορίζεται ως η τιμή του ορίσματος είτε επιστρέφεται (πρώτη υπογραφή) (δεύτερη υπογραφή).

Συμβολοσειρά C: Εάν υπάρχει ο χαρακτήρας οριοθέτησης, δεν αφαιρείται από την ακολουθία εισόδου, αντίθετα διατηρείται ως ο ακόλουθος χαρακτήρας που θα ανακτηθεί από τη ροή εάν υπάρχει.

istream::getline
Αφαιρεί χαρακτήρες από τη ροή ως μη μορφοποιημένη είσοδο και τους αποθηκεύει ως συμβολοσειρά c στη μεταβλητή 's' έως ότου ο εξαγόμενος χαρακτήρας γίνει ο οριοθετικός χαρακτήρας ή οι χαρακτήρες 'n' έχουν γραφτεί σε 's'. Επιπλέον, η μέθοδος θα σταματήσει την εξαγωγή χαρακτήρων εάν φτάσει στο τέλος του αρχείου.

Εσωτερικά, η συνάρτηση δημιουργεί ένα αντικείμενο πριν αποκτήσει πρόσβαση στην ακολουθία εισόδου. Τέλος, σκοτώνει το αντικείμενο πριν επιστρέψει, εξάγοντας χαρακτήρες από το αντίστοιχο αντικείμενο buffer ροής (υποθέτοντας ότι όλα είναι εντάξει) σαν να εκτελούσε μία από τις μεθόδους μέλους του, το sbumpc ή το sgetc.

istream::ignore
Οι χαρακτήρες λαμβάνονται από την ακολουθία εισαγωγής και απορρίπτονται ένας κάθε φορά έως ότου αφαιρεθούν είτε οι χαρακτήρες 'n' ή ένας συγκριθεί ίσος με το delim. Επιπλέον, εάν φτάσετε στο τέλος του αρχείου, η συνάρτηση σταματά την εξαγωγή χαρακτήρων. Η συνάρτηση ορίζει τη σημαία 'eofbit' εάν φτάσει σε αυτό το σημείο πολύ νωρίς (πριν εξαγάγετε n χαρακτήρες ή ανακαλύψετε το delim).

Πριν αποκτήσετε πρόσβαση στην ακολουθία εισόδου, η συνάρτηση κατασκευάζει ένα αντικείμενο φρουρού εσωτερικά (με το noskipws θα είναι αληθές). Τέλος, σκοτώνει το αντικείμενο φρουρού πριν επιστρέψει, εξάγοντας χαρακτήρες από το συσχετισμένο αντικείμενο buffer ροής (υποθέτοντας ότι όλα είναι εντάξει) σαν να εκτελούσε μία από τις μεθόδους μέλους του: sbumpc ή sgetc.

istream::operator>>
Ο τελεστής εξαγωγής (>>) εφαρμόζει αυτόν τον τελεστή σε μια ροή εισόδου. Έχει πάρα πολλά μέλη ως λειτουργία.

Αριθμητικός τύπος

Οι χαρακτήρες αφαιρούνται από τη ροή και αναλύονται διαδοχικά για να αναπαραστήσουν μια τιμή του σωστού τύπου, η οποία στη συνέχεια αποθηκεύεται ως τιμή 'val'. Πριν αποκτήσετε πρόσβαση στην ακολουθία εισόδου, η συνάρτηση κατασκευάζει ένα αντικείμενο φρουρού εσωτερικά (το noskipws θα είναι ψευδές). Εάν όλα πάνε καλά, τότε εκτελείται num get::get για να ολοκληρώσει τις διαδικασίες εξαγωγής και ανάλυσης ενώ τροποποιεί τις εσωτερικές σημαίες κατάστασης της ροής. Το αντικείμενο φρουρού καταστρέφεται τελικά πριν φύγει.

Η συνάρτηση δημιουργεί εσωτερικά ένα αντικείμενο φρουρού πριν από την ανάγνωση της ακολουθίας εισόδου, θεωρείται ότι εκτελεί μορφοποιημένη είσοδο. Τέλος, σκοτώνει το αντικείμενο του φρουρού πριν επιστρέψει, εξάγοντας χαρακτήρες από το σχετικό αντικείμενο buffer ροής (υποθέτοντας ότι όλα είναι εντάξει) σαν να εκτελούσε μία από τις μεθόδους μέλους του, το sbumpc ή το sgetc.

Χειριστές

Το pf (*this) ονομάζεται, όπου το pf θα μπορούσε να είναι χειριστής. Οι χειριστές είναι ρουτίνες που δημιουργούνται ειδικά για να καλούνται όταν καλείται αυτός ο τελεστής. Η ακολουθία εισόδου δεν επηρεάζεται από αυτήν τη διαδικασία και δεν εξάγονται χαρακτήρες.

istream::putback
Ο χαρακτήρας που έχει αποκατασταθεί προσπαθεί να μετακινήσει τον κέρσορα προς τα κάτω κατά ένα χαρακτήρα στη ροή, έτσι ώστε ο τελευταίος χαρακτήρας που ανακτήθηκε από τη ροή να μπορεί να εξαχθεί ξανά με λειτουργίες εισαγωγής.

Πριν από την πρόσβαση στην ακολουθία εισόδου, η συνάρτηση κατασκευάζει εσωτερικά ένα αντικείμενο φρουρού. Στη συνέχεια καλεί το sputbackc(c) στο σχετικό αντικείμενο buffer ροής (αν είναι καλό). Το αντικείμενο φρουρού καταστρέφεται τελικά πριν φύγει.

istream::read
Διαβάστε ένα μπλοκ δεδομένων:

Οι χαρακτήρες 'n' λαμβάνονται από τη ροή και στη συνέχεια αποθηκεύονται στον πίνακα που δείχνει το 's'. Αυτή η συνάρτηση απλώς αναπαράγει ένα μπλοκ δεδομένων χωρίς να επιθεωρήσει τα περιεχόμενα των δεδομένων ή να προσθέσει έναν μηδενικό χαρακτήρα στο τέλος.

Εντός της συνάρτησης, δημιουργείται πρώτα ένα αντικείμενο φρουρού πριν γίνει πρόσβαση στην ακολουθία εισόδου. Τέλος, σκοτώνει το αντικείμενο φρουρού πριν επιστρέψει, εξάγοντας χαρακτήρες από το συσχετισμένο αντικείμενο buffer ροής (υποθέτοντας ότι όλα είναι εντάξει) σαν να εκτελούσε μία από τις μεθόδους μέλους του: sbumpc ή sgetc.

Η κλήση του αριθμού μελών θα επιστρέψει τον συνολικό αριθμό χαρακτήρων που έχει διαβάσει και αποθηκεύσει σωστά αυτή η συνάρτηση.

istream::διαβαστικό
Αυτή η συνάρτηση εξαρτάται από τις εσωτερικές λειτουργίες του συγκεκριμένου αντικειμένου προσωρινής αποθήκευσης ροής που συνδέεται με τη ροή, η συμπεριφορά του οποίου ορίζεται σε μεγάλο βαθμό από την υλοποίηση για τυπικές κλάσεις.

Εντός της συνάρτησης, δημιουργείται πρώτα ένα αντικείμενο φρουρού πριν γίνει πρόσβαση στην ακολουθία εισόδου. Στη συνέχεια (εάν είναι επιτυχής), καλεί τη συνάρτηση μέλους στο αντικείμενο buffer ροής για να προσδιορίσει πόσοι χαρακτήρες είναι τώρα διαθέσιμοι πριν καλέσετε το 'sbumpc' για εξαγωγή μέχρι αυτόν τον αριθμό χαρακτήρων (ή sgetc). Το αντικείμενο φρουρού καταστρέφεται τελικά πριν φύγει.

istream::seekg
Η θέση στη γραμμή εισόδου καθορίζει πού θα τραβηχτεί ο ακόλουθος χαρακτήρας από τη ροή εισόδου. Πριν από την ανάγνωση της ακολουθίας εισόδου, η συνάρτηση κατασκευάζει εσωτερικά ένα αντικείμενο φρουρού. Στη συνέχεια (αν είναι εντάξει), πραγματοποιεί μία από τις δύο κλήσεις στο αντίστοιχο αντικείμενο buffer ροής: pubseekpos (1) ή pubseekoff (2), (εάν υπάρχει). Τέλος, σβήνει το αντικείμενο του φρουρού και φεύγει.

istream::sync
Ευθυγραμμίστε το buffer εισόδου:

Συγχρονίζει την ελεγχόμενη ακολουθία εισόδου του συνδεδεμένου buffer ροής. Η συγκεκριμένη υλοποίηση του αντικειμένου προσωρινής αποθήκευσης ροής που συνδέεται με τη ροή καθορίζει τις ιδιαιτερότητες της λειτουργίας.

istream::tellg
Λάβετε τη θέση της ακολουθίας εισόδου:

Δίνει τη θέση του τρέχοντος χαρακτήρα στη ροή εισόδου. Στη συνέχεια, η συνάρτηση επιστρέφει -1. Εάν το μέλος αποτύχει, επιστρέφει true.

Επιστρέφει rdbuf()->pubseekoff αν όχι (0,cur,in). Το αντικείμενο φρουρού καταστρέφεται τελικά πριν φύγει.

istream::unget
Αφαίρεση χαρακτήρα:

Προσπαθεί να μετακινήσει τον κέρσορα προς τα κάτω κατά έναν χαρακτήρα στη ροή, έτσι ώστε ο τελευταίος χαρακτήρας που ανακτήθηκε από τη ροή να μπορεί να εξαχθεί ξανά με λειτουργίες εισαγωγής.

Μη μέλος

χειριστής>> (istream)
Ο τελεστής εξαγωγής (>>) παρέχει μορφοποιημένη είσοδο με αυτήν την ενέργεια όταν εφαρμόζεται σε μια ροή εισόδου.

Ένας χαρακτήρας: Η ακολουθία χαρακτήρων αφαιρεί τον επόμενο χαρακτήρα και τον αποθηκεύει ως την τιμή του 'c'. Η διαδικασία εξαγωγής χαρακτήρων από είναι και η αποθήκευσή τους σε s, ως συμβολοσειρά c, σταματά (αν το πλάτος δεν είναι μηδέν) όταν συναντάται ένας χαρακτήρας κενού διαστήματος ή έχουν εξαχθεί χαρακτήρες (πλάτος ()-1).

Εξαγωγή rvalue: επιτρέπει την εξαγωγή αντικειμένων istream από rvalue, η οποία έχει το ίδιο αποτέλεσμα με την εξαγωγή από lvalues: Καλεί is>>Val.

Παράδειγμα 1

Σε αυτήν την περίπτωση, θα εξετάσουμε πώς μπορούμε να λάβουμε οποιαδήποτε τιμή από τον χρήστη και στη συνέχεια να την εμφανίσουμε ως αποτέλεσμα στην οθόνη.

#include
χρησιμοποιώντας χώρο ονομάτων std ;
ενθ κύριος ( )
{
ενθ Οχι ;
cout << 'Παρακαλώ εισάγετε έναν αριθμό' ;
τρώει >> Οχι ;
cout << 'Η εισαγόμενη τιμή είναι:' << Οχι << ' \n ' ;
}

Θα συμπεριλάβαμε το αρχείο κεφαλίδας . Στη συνέχεια, θα χρησιμοποιήσουμε τον χώρο ονομάτων «std» στον τυπικό χώρο ονομάτων. Θα ονομάζαμε τη συνάρτηση main(). Μια μεταβλητή με το όνομα 'no' θα δηλωθεί σε αυτήν τη μέθοδο. Ο τύπος δεδομένων 'int' αντιπροσωπεύεται για αυτήν τη μεταβλητή. Ο όρος 'int' είναι η συντομογραφία ενός ακέραιου αριθμού. Στη συνέχεια, χρησιμοποιείται η δήλωση «cout». Αυτή η εντολή εκτυπώνει τη γραμμή.

Ο χρήστης θα εισάγει οποιαδήποτε τυχαία τιμή μετά την εμφάνιση αυτού του κειμένου στην οθόνη. Στη συνέχεια, η δήλωση «cin» θα είχε χρησιμοποιηθεί. Αυτή η εντολή απαιτεί από τον χρήστη να υποδείξει την τιμή. Ο αριθμός που εισήγαγε ο χρήστης θα αποθηκευτεί σε μια μεταβλητή. Η τιμή που παρέχεται από τον χρήστη θα εμφανίζεται στην οθόνη χρησιμοποιώντας την εντολή «cout».

Παράδειγμα 2

Σε αυτήν την περίπτωση, θα δούμε πώς παίρνουμε οποιοδήποτε όνομα από τον χρήστη και στη συνέχεια θα το εμφανίζουμε στην οθόνη ως αποτέλεσμα.

#include
χρησιμοποιώντας χώρο ονομάτων std ;

ενθ κύριος ( )

{

απανθρακώνω όνομα [ 125 ] ;
cout << 'Εισάγετε το όνομά σας' << endl ;


τρώει >> ws ;

τρώει . γραμμή λήψης ( όνομα, 125 ) ;

cout << όνομα << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Θα ενσωματώναμε το αρχείο κεφαλίδας . Στη συνέχεια, θα χρησιμοποιήσουμε τον τυπικό χώρο ονομάτων ως «std». Θα καλούσαμε τη συνάρτηση main(). Σε αυτή τη μέθοδο, θα δηλώσουμε μια μεταβλητή. Αυτή η μεταβλητή διατηρεί τον τύπο δεδομένων «char». Στη συνέχεια χρησιμοποιείται η δήλωση «cout». Αυτή η εντολή εμφανίζει το κείμενο «Εισαγάγετε το όνομά σας» στην οθόνη. Μετά την εμφάνιση αυτού του κειμένου στην οθόνη, ο χρήστης θα εισαγάγει οποιοδήποτε όνομα. Στη συνέχεια, θα χρησιμοποιούσαμε τη δήλωση «cin».

Αυτή η εντολή παίρνει την τιμή από τον χρήστη. Το παρεχόμενο όνομα θα αποθηκευτεί σε μια μεταβλητή «ws». Εδώ, για άλλη μια φορά, θα χρησιμοποιούσαμε την εντολή «cin». Μέσα σε αυτήν την εντολή, εφαρμόζεται η συνάρτηση getline(). Αυτή η συνάρτηση περιέχει την παράμετρο που περιλαμβάνει το όνομα που έχει εισάγει ο χρήστης και το μήκος του ονόματος. Η εντολή «cout» θα χρησιμοποιηθεί για την εμφάνιση του ονόματος που παρέχεται από τον χρήστη. Για τον τερματισμό του κωδικού, θα χρησιμοποιηθεί η εντολή «return 0».

συμπέρασμα

Αρχικά, μιλήσαμε για το τι είναι οι συναρτήσεις istream C++. Στη συνέχεια παρατηρούμε διάφορες λειτουργίες και σημαντικούς ορισμούς που αναφέρονται. Σε αυτό το άρθρο, έχουμε εκτελέσει διαφορετικούς κώδικες που περιέχουν μια ποικιλία συναρτήσεων istream. Στον πρώτο κωδικό, παίρνουμε οποιονδήποτε αριθμό από τον χρήστη και εμφανίζουμε αυτόν τον αριθμό στην οθόνη. Στη δεύτερη, ο χρήστης εισήγαγε το όνομα και τύπωσε αυτό το όνομα στην οθόνη.