| Both sides previous revisionPrevious revisionNext revision | Previous revision | 
| cpp:basic_io [2017/05/03 05:27]  –  gthanos | cpp:basic_io [Unknown date] (current)  – external edit (Unknown date) 127.0.0.1 | 
|---|
| ====== Βασική είσοδος και έξοδος ====== | ====== Βασική είσοδος και έξοδος ====== | 
 |  | 
| Η C++ χρησιμοποιεί την έννοια του //stream// προκειμένου να διαβάσει ή να γράψει σε σειριακές συσκευές όπως είναι η κονσόλα και το πληκτρολόγιο. Ένα //stream// είναι μία οντότητα από την οποία ένα C++ πρόγραμμα μπορεί να γράψει ή να διαβάσει χαρακτήρες, χωρίς να γνωρίζει τις λεπτομέρειες τις εσωτερικής υλοποίησης του. Το μόνο που είναι απαραίτητο να γνωρίζουμε είναι ότι οι χαρακτήρες γράφονται σειριακά, ο ένας μετά τον άλλο. | Η C++ χρησιμοποιεί την έννοια του //stream// προκειμένου να διαβάσει ή να γράψει σε σειριακές συσκευές όπως είναι η κονσόλα και το πληκτρολόγιο. Ένα //stream// είναι μία ακολουθία χαρακτήρων άγνωστου μεγέθους. Ένα C++ πρόγραμμα μπορεί να γράψει σε ένα //stream// ή να διαβάσει χαρακτήρες από ένα //stream//, χωρίς να γνωρίζει τις λεπτομέρειες της εσωτερικής υλοποίησης της πηγής από την οποία διαβάζει ή στην οποία γράφει. Το μόνο που είναι απαραίτητο να γνωρίζουμε είναι ότι οι χαρακτήρες γράφονται σειριακά, ο ένας μετά τον άλλο. | 
 |  | 
| Η //standard// βιβλιοθήκη της C++ ορίζει τα παρακάτω τέσσερα (4) streams σε κάθε πρόγραμμα: | Η //standard// βιβλιοθήκη της C++ ορίζει τα παρακάτω τέσσερα (4) streams σε κάθε πρόγραμμα: | 
| |  <code cpp>std::cin</code>  | standard input stream  |   | |  <code cpp>std::cin</code>  | standard input stream  |   | 
| |  <code cpp>td::cout</code>  | standard output stream  | | |  <code cpp>std::cout</code>  | standard output stream  | | 
| |  <code cpp>std::cerr</code>  | standard error stream  | | |  <code cpp>std::cerr</code>  | standard error stream  | | 
| |  <code cpp>std::clog</code>  | standard log stream  | | |  <code cpp>std::clog</code>  | standard log stream  | | 
 |  | 
| ==== std::cout ==== | ===== std::cout ===== | 
 |  | 
| Το //stream// **std::cout** είναι αντικείμενο της κλάσης //**ostream**// και συνδέεται με τη //standard// έξοδο του προγράμματος. Το αντικείμενο χρησιμοποιείται σε συνδυασμό με τον τελεστή **<<** (//stream insertion operator//). Δείτε το παρακάτω παράδειγμα χρήσης του //stream// **std::cout**. | Το //stream// **std::cout** είναι αντικείμενο της κλάσης //**ostream**// και συνδέεται με τη //standard// έξοδο του προγράμματος. Το αντικείμενο χρησιμοποιείται σε συνδυασμό με τον τελεστή **%%<<%%** (//stream insertion operator//). Δείτε το παρακάτω παράδειγμα χρήσης του //stream// **std::cout**. | 
 |  | 
| <code cpp cout.cpp> | <code cpp cout.cpp> | 
| using namespace std; | using namespace std; | 
| int main() { | int main() { | 
|   cout << "Hello " << "World! << endl; |   cout << "Hello " << "World!" << endl; | 
| } | } | 
| </code> | </code> | 
|   |  | 
|   | <WRAP tip 80% center round> | 
|   | Βασικό χαρακτηριστικό των streams είναι ότι μπορείτε να εισάγετε στο stream ή να εξάγετε από το stream περισσότερες από μία ροές χαρακτήρων όπως δηλώνεται παραπάνω. | 
|   | </WRAP> | 
 |  | 
| Το παραπάνω είναι ισοδύναμο με το εξής: | Το παραπάνω είναι ισοδύναμο με το εξής: | 
| int main() { | int main() { | 
|   cout << "Hello " ; |   cout << "Hello " ; | 
|   cout << "World! ; |   cout << "World!" ; | 
|   cout << endl; |   cout << endl; | 
| } | } | 
 |  | 
| <WRAP tip 80% center round> | <WRAP tip 80% center round> | 
| Βασικό χαρακτηριστικό των streams είναι ότι μπορείτε να εισάγετε στο stream ή να εξάγετε από το stream περισσότερες από μία ροές χαρακτήρων όπως δηλώνεται παραπάνω. | Παρατηρείτε ότι αν και το //stream// ορίστηκε ως **std::cout** στο πρόγραμμα αναγράφεται ως **cout**. Ο λόγος είναι η 2η γραμμή του προγράμματος ''using namespace std;'', η οποία δηλώνει ότι το πρόγραμμα χρησιμοποιεί το **namespace std**. | 
| </WRAP> | </WRAP> | 
 |  | 
| ==== std::cin ==== | ===== std::cin ===== | 
 |  | 
| Το //stream// **std::cin** είναι αντικείμενο της κλάσης //**istream**// και συνδέεται με τη //standard// είσοδο του προγράμματος. Το αντικείμενο χρησιμοποιείται σε συνδυασμό με τον τελεστή ''>>'' (//stream extraction operator//). Δείτε το παρακάτω παράδειγμα χρήσης του //stream// **std::cin**. | Το //stream// **std::cin** είναι αντικείμενο της κλάσης //**istream**// και συνδέεται με τη //standard// είσοδο του προγράμματος. Το αντικείμενο χρησιμοποιείται σε συνδυασμό με τον τελεστή **%%>>%%** (//stream extraction operator//). Δείτε το παρακάτω παράδειγμα χρήσης του //stream// **std::cin**. | 
 |  | 
| Χαρακτηριστικό του **std::cin** είναι ότι διαβάζει λέξη-λέξη. Εάν θέλετε να διαβάσετε περισσότερες από μία λέξεις θα πρέπει να επαναλάβετε την κλάση όπως του cin, όπως παρακάτω: | Χαρακτηριστικό του **std::cin** είναι ότι διαβάζει λέξη-λέξη. Εάν θέλετε να διαβάσετε περισσότερες από μία λέξεις θα πρέπει να επαναλάβετε την κλήση όπως παρακάτω: | 
 |  | 
| <code cpp cin.cpp> | <code cpp cin.cpp> | 
|   cin >> firstname >> lastname; |   cin >> firstname >> lastname; | 
|   cout << "Your name is: " << firstname << " " << lastname << endl; |   cout << "Your name is: " << firstname << " " << lastname << endl; | 
|   |   int age; | 
|   |   count << "Enter your age:"; | 
|   |   cin >> age; | 
|   |   cout << "Your age is: " << age << endl; | 
| } | } | 
| </code> | </code> | 
 |  | 
| Το παραπάνω είναι ισοδύναμο με δύο διακριτές κλήσεις του std::cin ως εξής: | <WRAP tip 80% center round>  | 
|   | Το std::cin μετασχηματίζει τη λέξη που διάβασε στον τύπο δεδομένων της μεταβλητής στην οποία θα αποθηκευτεί η πληροφορία.   | 
|   | Για παράδειγμα, στο παραπάνω πρόγραμμα διαβάζει ένα αλφαριθμητικό που αναμένουμε να περιέχει έναν ακέραιο και το αποθηκεύει στην ακέραια μεταβλητή age. | 
 |  | 
| <code cpp cin.cpp>  | Επίσης η εντολή  | 
| #include <iostream>  | <code cpp>  | 
| using namespace std;  |   cin >> firstname >> lastname;  | 
| int main() {  | </code>  | 
|   char firstname[50], lastname[50];  |   | 
|   cout << "Enter your first name followed by your last name: "; | Το παραπάνω είναι ισοδύναμο με δύο διακριτές κλήσεις του **std::cin** ως εξής:  | 
|   |   | 
|   | <code cpp> | 
|   cin >> firstname; |   cin >> firstname; | 
|   cin >> lastname; |   cin >> lastname; | 
|   cout << "Your name is: " << firstname << " " << lastname << endl; |   | 
| } |   | 
| </code> | </code> | 
|   |  | 
|   | </WRAP> | 
|   |  | 
 |  | 
 |  | 
| ==== std::cerr ==== | ===== std::cerr ===== | 
 |  | 
| Το //stream// **std::cerr** είναι αντικείμενο της κλάσης //**ostream**// και συνδέεται με τη //standard error// του προγράμματος. Το αντικείμενο χρησιμοποιείται σε συνδυασμό με τον τελεστή ''<<'' (//stream insertion operator//). Το //stream// **std::cerr** είναι //unbuffered//, δηλαδή εμφανίζεται στην οθόνη χωρίς καθυστέρηση καθώς δεν μεσολαβεί κάποιο //buffer//. Δείτε το παρακάτω παράδειγμα χρήσης του //stream// **std::cerr**. | Το //stream// **std::cerr** είναι αντικείμενο της κλάσης //**ostream**// και συνδέεται με τη //standard error// του προγράμματος. Το αντικείμενο χρησιμοποιείται σε συνδυασμό με τον τελεστή %%<<%% (//stream insertion operator//). Το //stream// **std::cerr** είναι //unbuffered//, δηλαδή εμφανίζεται στην οθόνη χωρίς καθυστέρηση καθώς δεν μεσολαβεί κάποιο //buffer//. Δείτε το παρακάτω παράδειγμα χρήσης του //stream// **std::cerr**. | 
 |  | 
| <code cpp cerr.cpp> | <code cpp cerr.cpp> | 
| using namespace std; | using namespace std; | 
| int main() { | int main() { | 
|   cout << "Hello " << "World! ;  |   cout << "Hello " << "World!" ;  | 
|   cerr << "My " << "error log" << endl; |   cerr << "My " << "error log" << endl; | 
| } | } | 
| </code> | </code> | 
 |  | 
| ==== std::clog ==== | ===== std::clog ===== | 
 |  | 
| Ανάλογο με το //stream// **std::cerr** με τη διαφορά ότι το συγκεκριμένο //stream// είναι //buffered//. | Ανάλογο με το //stream// **std::cerr** με τη διαφορά ότι το συγκεκριμένο //stream// είναι //buffered//. |