User Tools

Site Tools


cpp:isteams

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
cpp:isteams [2020/04/11 05:46]
gthanos [Input Streams]
cpp:isteams [2020/05/17 17:11]
Line 1: Line 1:
-====== Input Streams ====== 
- 
-Όπως προαναφέρθηκε τα //streams// εισόδου χρησιμοποιούν τον τελεστη ''<<'' (//stream extraction operator//) για την ανάγνωση από το //stream//. H //standard// βιβλιοθήκη παρέχει συναρτήσεις υπεφόρτωσης για τους βασικούς τύπους δεδομένων, ενώ δίνεται η δυνατότητα [[cpp:vector_overloading_binary_operators|υπερφόρτωσης]] για όλους τους μη βασικούς τύπους που θα χρειαστεί να κατασκευάσετε στα προγράμματα σας. Το παρακάτω παράδειγμα διαβάσματος από το πληκτρολόγιο (//stdin//) είναι ενδεικτικό. 
- 
-<code cpp 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; 
-} 
-</code> 
- 
-Για είσόδο ''hello -1512 1.63'', η έξοδος είναι  
-<code> 
-Read: h 
-Read: ello 
-Read: -1512 
-Read: 1.63 
-</code> 
- 
-Παρατηρήστε ότι από την πρώτη κλήση διαβάζεται ένας χαρακτήρας, ενώ από την 2η κλήση διαβάζεται το υπόλοιπο του //stream// μέχρι να συναντήσουμε κενό χαρακτήρα, χαρακτήρα //tab// ή χαρακτήρα αλλαγής γραμμής. Ο κενός χαρακτήρας, ο χαρακτήρας //tab// ή ο χαρακτήρας αλλαγής γραμμής αποτελούν διαχωριστές την πληροφορίας ανάγνωσης ενός //stream// εισόδου και αγνοούνται από το //stream//. 
- 
-====== Διαβάζοντας λέξη-λέξη ή γραμμή-γραμμή ====== 
- 
-Εάν πρόκειται να διαβάσουμε ένα κείμενο, η //standard// βιβλιοθήκη μας δίνει τη δυνατότητα να διαβάσουμε το κείμενο λέξη-λέξη ως εξής: 
- 
-<code cpp input_word.cpp> 
-#include <iostream> 
-#include <cstdlib> // for exit() 
- 
-using namespace std; 
- 
-int main() { 
-  char str[256]; 
-  while(!cin.eof()) { 
-    cin >> str; 
-    cout << str << " "; 
-  } 
-} 
-</code> 
- 
-Το παραπάνω παράδειγμα για να δουλέψει με ασφάλεια θα πρέπει να είμαστε σίγουροι ότι η λέξη μέγιστου μήκους που θα διαβάσουμε θα έχει μέγεθος 255 χαρακτήρες (συν το χαρκτήρα '\0'). Εναλλακτικά μπορούμε να διαβάσουμε μία ολόκληρη γραμμή χρησιμοποιώντας τη συνάρτηση //getline// ως εξής: 
- 
-<code cpp 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; 
-  } 
-} 
-</code> 
- 
-Σε αυτή την περίπτωση θα πρέπει να είμαστε σίγουροι ότι το μέγιστο μήκος γραμμής δεν υπερβαίνει τους 256 χαρακτήρες, διαφορετικά εάν διαβάζετε από το πληκτρολόγιο η συμπεριφορά του προγράμματος δεν είναι η αναμενόμενη, εφόσον εντός των πώτων 256 χαρακτήρων δεν συναντάται χαρακτήρας αλλαγής γραμμής. 
- 
-Το παραπάνω δεν ισχύει εάν χρησιμοποιήσουμε την έκδοση της //getline// για την κλάση ''std::string''. Σε αυτή την περίπτωση δεν απαιτείται καμία μέριμνα για το μέγεθος των εισαγόμενων συμβολοσειρών. Δείτε το ενδεικτικό παράδειγμα που ακολουθεί: 
- 
-<code cpp 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; 
-  } 
-} 
-</code> 
  
cpp/isteams.txt · Last modified: 2020/05/17 17:11 (external edit)