Η C++ χρησιμοποιεί την έννοια του stream προκειμένου να διαβάσει ή να γράψει σε σειριακές συσκευές όπως είναι η κονσόλα και το πληκτρολόγιο. Ένα stream είναι μία ακολουθία χαρακτήρων άγνωστου μεγέθους. Ένα C++ πρόγραμμα μπορεί να γράψει σε ένα stream ή να διαβάσει χαρακτήρες από ένα stream, χωρίς να γνωρίζει τις λεπτομέρειες της εσωτερικής υλοποίησης της πηγής από την οποία διαβάζει ή στην οποία γράφει. Το μόνο που είναι απαραίτητο να γνωρίζουμε είναι ότι οι χαρακτήρες γράφονται σειριακά, ο ένας μετά τον άλλο.
Η standard βιβλιοθήκη της C++ ορίζει τα παρακάτω τέσσερα (4) streams σε κάθε πρόγραμμα:
std::cin | standard input stream |
std::cout | standard output stream |
std::cerr | standard error stream |
std::clog | standard log stream |
Το stream std::cout είναι αντικείμενο της κλάσης ostream και συνδέεται με τη standard έξοδο του προγράμματος. Το αντικείμενο χρησιμοποιείται σε συνδυασμό με τον τελεστή << (stream insertion operator). Δείτε το παρακάτω παράδειγμα χρήσης του stream std::cout.
#include <iostream> using namespace std; int main() { cout << "Hello " << "World!" << endl; }
Βασικό χαρακτηριστικό των streams είναι ότι μπορείτε να εισάγετε στο stream ή να εξάγετε από το stream περισσότερες από μία ροές χαρακτήρων όπως δηλώνεται παραπάνω.
Το παραπάνω είναι ισοδύναμο με το εξής:
#include <iostream> using namespace std; int main() { cout << "Hello " ; cout << "World!" ; cout << endl; }
Παρατηρείτε ότι αν και το stream ορίστηκε ως std::cout στο πρόγραμμα αναγράφεται ως cout. Ο λόγος είναι η 2η γραμμή του προγράμματος using namespace std;
, η οποία δηλώνει ότι το πρόγραμμα χρησιμοποιεί το namespace std.
Το stream std::cin είναι αντικείμενο της κλάσης istream και συνδέεται με τη standard είσοδο του προγράμματος. Το αντικείμενο χρησιμοποιείται σε συνδυασμό με τον τελεστή >> (stream extraction operator). Δείτε το παρακάτω παράδειγμα χρήσης του stream std::cin.
Χαρακτηριστικό του std::cin είναι ότι διαβάζει λέξη-λέξη. Εάν θέλετε να διαβάσετε περισσότερες από μία λέξεις θα πρέπει να επαναλάβετε την κλήση όπως παρακάτω:
#include <iostream> using namespace std; int main() { char firstname[50], lastname[50]; cout << "Enter your first name followed by your last name: "; cin >> firstname >> lastname; cout << "Your name is: " << firstname << " " << lastname << endl; int age; count << "Enter your age:"; cin >> age; cout << "Your age is: " << age << endl; }
Το std::cin μετασχηματίζει τη λέξη που διάβασε στον τύπο δεδομένων της μεταβλητής στην οποία θα αποθηκευτεί η πληροφορία. Για παράδειγμα, στο παραπάνω πρόγραμμα διαβάζει ένα αλφαριθμητικό που αναμένουμε να περιέχει έναν ακέραιο και το αποθηκεύει στην ακέραια μεταβλητή age.
Επίσης η εντολή
cin >> firstname >> lastname;
Το παραπάνω είναι ισοδύναμο με δύο διακριτές κλήσεις του std::cin ως εξής:
cin >> firstname; cin >> lastname;
Το stream std::cerr είναι αντικείμενο της κλάσης ostream και συνδέεται με τη standard error του προγράμματος. Το αντικείμενο χρησιμοποιείται σε συνδυασμό με τον τελεστή << (stream insertion operator). Το stream std::cerr είναι unbuffered, δηλαδή εμφανίζεται στην οθόνη χωρίς καθυστέρηση καθώς δεν μεσολαβεί κάποιο buffer. Δείτε το παρακάτω παράδειγμα χρήσης του stream std::cerr.
#include <iostream> using namespace std; int main() { cout << "Hello " << "World!" ; cerr << "My " << "error log" << endl; }
Ανάλογο με το stream std::cerr με τη διαφορά ότι το συγκεκριμένο stream είναι buffered.