iostream
C++ Πρότυπη βιβλιοθήκη |
---|
Τυπική Βιβλιοθήκη Προτύπων (STL) |
C++11 |
C Πρότυπη βιβλιοθήκη |
Το iostream
είναι μέρος της πρότυπης βιβλιοθήκης της γλώσσας προγραμματισμού C++ για την είσοδο/έξοδο δεδομένων. Στην πραγματικότητα είναι ένα ψευδώνυμο (typedef) για την εξειδίκευση του πρωτύπου κλάσης basic_iostream για είσοδο - έξοδο δεδομένων σε μορφή char. Παράγεται με διπλή κληρονομικότητα από τα πρότυπα κλάσεων basic_ostream και basic_istream. Τα αρχικά io στο όνομα της βιβλιοθήκης αναφέρονται στις αγγλικές λέξεις Input/Output Stream που μεταφράζονται ως είσοδος/έξοδος ροής (stream) δεδομένων. Η βιβλιοθήκη iostream
παρέχει την βασική είσοδο/έξοδο σε ένα πρόγραμμα της C++. Το cin
είναι αντικείμενο της istream (παράφραση του αγγλικού see-in που σημαίνει δες είσοδο), και τα cout
(παράφραση του αγγλικού see-out που σημαίνει δες έξοδο), cerr
(παράφραση του αγγλικού see-error που σημαίνει δες έξοδο λαθών), και clog
(παράφραση του αγγλικού see-log που σημαίνει δες έξοδο αρχείου καταγραφής) αντικείμενα της ostream για την ροή δεδομένων στην τυπική έξοδο, την έξοδο λαθών και την έξοδο στο αρχείο καταγραφής αντίστοιχα. Όλα αυτά τα αντικείμενα βρίσκονται κάτω από το χώρο ονομάτων (namespace) std
.[1][2]
Παραδείγματα
[Επεξεργασία | επεξεργασία κώδικα]Ένα απλό παράδειγμα χρήσης είναι το πρόγραμμα "hello world" που τυπώνει το μήνυμα "Γεια σου κόσμε!" μαζί με τον χαρακτήρα αλλαγής γραμμής \n:
#include <iostream>
int main() {
std::cout << "Γεια σου κόσμε!\n";
return 0;
}
Το cout
είναι αντικείμενο της κλάσης ostream
. Ο τελεστής << υπερφορτώνεται στην ostream ώστε να στέλνει τα δεδομένα στην τυπική έξοδο (συνήθως είναι η οθόνη). Αντίστοιχα το cin
είναι αντικείμενο της κλάσης istream
. Ο τελεστή >> υπερφορτώνεται στην istream ώστε να δέχεται δεδομένα από την τυπική είσοδο (συνήθως είναι το πληκτρολόγιο). Ο τελεστής << ή >> δείχνει συμβολικά την ροή των δεδομένων. Για παράδειγμα στο std::cout << "Γεια σου κόσμε!\n"; δείχνει την ροή από αριστερά προς τα δεξιά (δηλαδή στην έξοδο cout που παραφράσει το see out που σημαίνει δες την έξοδο). Εναλλακτικά στην θέση του '\n' μπορεί να χρησιμοποιηθεί το endl
που σημαίνει (end line - μεταφράζεται ως τέλος/αλλαγή γραμμής).
Στο παρακάτω παράδειγμα φαίνεται και η χρήση του cin
για είσοδο:
#include <iostream>
#include <string> // για το αντικείμενο τύπου αλφαριθμητικού string
using namespace std; // χρήση του χώρου ονομάτων std ώστε να χρησιμοποιείται κατευθείαν
// η cout χωρίς το std:cout κλπ
int main() {
string name;
cout << " Ποιο είναι το όνομά σου: ";
cin >> name; // περιμένει να διαβάζει από την είσοδο-πληκτρολόγιο
// ένα αλφαριθμητικό με το όνομα (μέχρι να πατήσει
// ο χρήστης το enter, δηλαδή την αλλαγή γραμμής)
// Εναλλακτικά θα μπορούσε να είναι με την χρήση του '\n':
// cout << "Γεια σου " << name << '\n';
cout << "Γεια σου " << name << endl;
return 0;
}
Το endl
είναι μια λειτουργία της εξόδου η οποία εκτός από την αλλαγή γραμμή, αδειάζει άμεσα την μνήμη (buffer εξόδου) ώστε να γίνει άμεσα η έξοδος (αυτό ιδιαίτερα είναι σημαντικό όταν η έξοδος είναι σε εξωτερικό αρχείο π.χ. χρησιμοποιώντας την βιβλιοθήκη fstream).
Μορφοποίηση εξόδου
[Επεξεργασία | επεξεργασία κώδικα]Μέθοδοι
[Επεξεργασία | επεξεργασία κώδικα]width(int x) |
ελάχιστο πλάτος (αριθμός) χαρακτήρων για την επόμενη έξοδο |
fill(char x) |
ο χαρακτήρας που θα χρησιμοποιηθεί για την περίπτωση που θα πρέπει να γεμιστεί για να φτάσουμε στο ελάχιστο πλάτος χαρακτήρων |
precision(int x) |
ορίζει τον αριθμό ψηφίων (ακρίβεια) σε ένα δεκαδικό αριθμό (αριθμό κινητής υποδιαστολής) |
Παράδειγμα
using namespace std;
cout.width(10);
cout << "ten" << "four" << "four";
Προσαρμογή ροής
[Επεξεργασία | επεξεργασία κώδικα]Ειδικά κλάσεις-αντικείμενα τα οποία ονομάζονται προσαρμοστές (manipulators) χρησιμοποιούνται για να προσαρμόσουν την γενική ροή δεδομένων μέσω των τελεστών εισόδου/εξόδου: <<
or >>
.
endl |
"end line" (τέλος-αλλαγή γραμμής): εισάγει αλλαγή γραμμής (χαρακτήρας \n) στη ροή δεδομένων και αδειάζει την προσωρινή μνήμη της ροής (stream buffer). |
ends |
"end string" (τέλος αλφαριθμητικού): εισάγει ένα κενό χαρακτήρα μέσα στη ροή δεδομένων και αδειάζει την προσωρινή μνήμη της ροής (stream buffer). |
flush |
εξαναγκάζει την ροή δεδομένων εξόδου να γράψει στην έξοδο όλα τα δεδομένα που βρίσκονται προσωρινή μνήμης της ροής (stream buffer). |
dec |
αλλάζει την μορφοποίηση της εξόδου ώστε οι αριθμοί να εμφανίζονται σε δεκαδική μορφή |
oct |
αλλάζει την μορφοποίηση της εξόδου ώστε οι αριθμοί να εμφανίζονται σε οκταδική μορφή |
hex |
αλλάζει την μορφοποίηση της εξόδου ώστε οι αριθμοί να εμφανίζονται σε δεκαεξαδική μορφή |
ws |
επιβάλει στην ροή εισόδου να αγνοεί όλα τα κενά-whitespaces (είναι ο χαρακτήρας κενού (space), αλλαγής γραμμής (enter '\n'), το tab ('\t') κλπ.) |
showpoint |
μορφοποιεί την ροή δεδομένων ώστε να δείχνει τα δεκαδικά στοιχεία μαζί με κάποια μηδενικά με όλο τον αριθμό |
Περαιτέρω προσαρμογές της ροής δεδομένων μπορούν να γίνουν με την εξειδικευμένη βιβλιοθήκη για το σκοπό αυτό: iomanip
.
Δείτε επίσης
[Επεξεργασία | επεξεργασία κώδικα]- fstream: Τυπική βιβλιοθήκη της C++ για είσοδο-έξοδο από-σε εξωτερικά αρχεία.
Παραπομπές
[Επεξεργασία | επεξεργασία κώδικα]- ↑ Bjarne Stroustrup (1997). The C++ programming language (3η έκδοση). Addison-Wesley. σελίδες 637-640. ISBN 0-201-88954-4.
- ↑ Stanley B. Lippman· Josee Lajoie (1999). C++ Primer (3η έκδοση). Massachusetts: Addison-Wesley. σελίδες 1063-1067. ISBN 0-201-82470-1.