====== Input Streams ====== Όπως προαναφέρθηκε τα //streams// εισόδου χρησιμοποιούν τον τελεστη %%>>%% (//stream extraction operator//) για την ανάγνωση από το //stream//. H //standard// βιβλιοθήκη παρέχει συναρτήσεις υπεφόρτωσης για τους βασικούς τύπους δεδομένων, ενώ δίνεται η δυνατότητα [[cpp:vector_overloading_binary_operators|υπερφόρτωσης]] για όλους τους μη βασικούς τύπους που θα χρειαστεί να κατασκευάσετε στα προγράμματα σας. Το παρακάτω παράδειγμα διαβάσματος από το πληκτρολόγιο (//stdin//) είναι ενδεικτικό. #include using namespace std; int main() { char c, str[256]; int number; double factor; cin >> c; cout << "Read: " << c << endl; cin >> str; cout << "Read: " << str << endl; cin >> number; cout << "Read: " << number << endl; cin >> factor; cout << "Read: " << factor << endl; } Για είσόδο ''hello -1512 1.63'', η έξοδος είναι Read: h Read: ello Read: -1512 Read: 1.63 Παρατηρήστε ότι από την πρώτη κλήση διαβάζεται ένας χαρακτήρας, ενώ από την 2η κλήση διαβάζεται το υπόλοιπο του //stream// μέχρι να συναντήσουμε κενό χαρακτήρα, χαρακτήρα //tab// ή χαρακτήρα αλλαγής γραμμής. Ο κενός χαρακτήρας, ο χαρακτήρας //tab// ή ο χαρακτήρας αλλαγής γραμμής αποτελούν διαχωριστές την πληροφορίας ανάγνωσης ενός //stream// εισόδου και αγνοούνται από το //stream//. ====== Διαβάζοντας λέξη-λέξη ή γραμμή-γραμμή ====== Εάν πρόκειται να διαβάσουμε ένα κείμενο, η //standard// βιβλιοθήκη μας δίνει τη δυνατότητα να διαβάσουμε το κείμενο λέξη-λέξη ως εξής: #include #include // for exit() using namespace std; int main() { char str[256]; while(!cin.eof()) { cin >> str; cout << " -> " << str << endl; } } Το παραπάνω παράδειγμα για να δουλέψει με ασφάλεια θα πρέπει να είμαστε σίγουροι ότι η λέξη μέγιστου μήκους που θα διαβάσουμε θα έχει μέγεθος 255 χαρακτήρες (συν το χαρκτήρα '\0'). Εναλλακτικά μπορούμε να διαβάσουμε μία ολόκληρη γραμμή χρησιμοποιώντας τη συνάρτηση //getline// ως εξής: #include #include // for exit() using namespace std; int main() { char str[256]; while(!cin.eof()) { // Read a line of maximum size 255 bytes. cin.getline(str, 256); cout << " -> " << str << endl; } } Σε αυτή την περίπτωση δεν είναι αναγκαίο να γνωρίζουμε ότι το μέγιστο μήκος γραμμής δεν υπερβαίνει τους 256 χαρακτήρες μαζί με τον χαρακτήρα αλλαγής γραμμής. Εάν μία γραμμή υπερβαίνει το συγκεκριμένο μέγεθος, θα διαβαστεί σε περισσότερες από μία επαναλήψεις. Ο παραπάνω περιορισμός δεν ισχύει εάν χρησιμοποιήσουμε την έκδοση της συνάρτησης //getline// για την κλάση ''std::string''. Σε αυτή την περίπτωση δεν απαιτείται καμία μέριμνα για το μέγεθος των εισαγόμενων συμβολοσειρών, διότι η κλάση ''std::string'' μπορεί να αποθηκεύσει συμβολοσειρές μεταβλητού μήκους και θεωρητικά άπειρου μεγέθους. Δείτε το ενδεικτικό παράδειγμα που ακολουθεί: #include #include // for exit() using namespace std; int main() { string str; while(!cin.eof()) { getline(cin, str); cout << " -> " << str << endl; } }