This is an old revision of the document!
Table of Contents
Input Streams
Όπως προαναφέρθηκε τα streams εισόδου χρησιμοποιούν τον τελεστη «
(stream extraction operator) για την ανάγνωση από το stream. H standard βιβλιοθήκη παρέχει συναρτήσεις υπεφόρτωσης για τους βασικούς τύπους δεδομένων, ενώ δίνεται η δυνατότητα υπερφόρτωσης για όλους τους μη βασικούς τύπους που θα χρειαστεί να κατασκευάσετε στα προγράμματα σας. Το παρακάτω παράδειγμα διαβάσματος από το πληκτρολόγιο (stdin) είναι ενδεικτικό.
- istream_example.cpp
#include <iostream> 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 βιβλιοθήκη μας δίνει τη δυνατότητα να διαβάσουμε το κείμενο λέξη-λέξη ως εξής:
- input_word.cpp
#include <iostream> #include <cstdlib> // for exit() using namespace std; int main() { char str[256]; while(!cin.eof()) { cin >> str; cout << str << " "; } }
Το παραπάνω παράδειγμα για να δουλέψει με ασφάλεια θα πρέπει να είμαστε σίγουροι ότι η λέξη μέγιστου μήκους που θα διαβάσουμε θα έχει μέγεθος 255 χαρακτήρες (συν το χαρκτήρα '\0'). Εναλλακτικά μπορούμε να διαβάσουμε μία ολόκληρη γραμμή χρησιμοποιώντας τη συνάρτηση getline ως εξής:
- input_line.cpp
#include <iostream> #include <cstdlib> // 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 χαρακτήρες, διαφορετικά εάν διαβάζετε από το πληκτρολόγιο η συμπεριφορά του προγράμματος δεν είναι η αναμενόμενη, εφόσον εντός των πώτων 256 χαρακτήρων δεν συναντάται χαρακτήρας αλλαγής γραμμής.
Το παραπάνω δεν ισχύει εάν χρησιμοποιήσουμε την έκδοση της getline για την κλάση std::string
. Σε αυτή την περίπτωση δεν απαιτείται καμία μέριμνα για το μέγεθος των εισαγόμενων συμβολοσειρών. Δείτε το ενδεικτικό παράδειγμα που ακολουθεί:
- tokenize_using_std_string.cpp
#include <iostream> #include <cstdlib> // for exit() using namespace std; int main() { string str; while(!cin.eof()) { getline(cin, str); cout << str << endl; } }