User Tools

Site Tools


cpp:isteams

This is an old revision of the document!


Input Streams

Όπως προαναφέρθηκε τα streams εισόδου χρησιμοποιούν τον τελεστη « (stream extraction operator) για την ανάγνωση από το stream. H standard βιβλιοθήκη παρέχει συναρτήσεις υπεφόρτωσης για τους βασικούς τύπους δεδομένων, ενώ δίνεται η δυνατότητα υπερφόρτωσης για όλους τους μη βασικούς τύπους που θα χρειαστεί να κατασκευάσετε στα προγράμματα σας. Το παρακάτω παράδειγμα διαβάσματος από το πληκτρολόγιο (stdin) είναι ενδεικτικό.

istream_example.cpp
#include <iostream>
#include <cstdlib> // for exit()
 
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 ή χαρακτήρα αλλαγής γραμμής.

Διαβάζοντας λέξη-λέξη ή γραμμή-γραμμή

Εάν πρόκειται να διαβάσουμε ένα κείμενο, η 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;
  }
}
cpp/isteams.1558418883.txt.gz · Last modified: 2019/05/21 05:08 (external edit)