User Tools

Site Tools


cpp:osteams

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:osteams [2019/05/19 14:54]
gthanos
cpp:osteams [2020/05/17 18:10]
Line 1: Line 1:
-====== Output Streams ====== 
- 
-Όπως προαναφέρθηκε τα //streams// εισόδου χρησιμοποιούν τον τελεστη ''>>'' (//stream insertion operator//) για την ανάγνωση από το //stream//. Σε αναλογία με τα //input streams//, η //standard// βιβλιοθήκη παρέχει συναρτήσεις υπεφόρτωσης για τους βασικούς τύπους δεδομένων, ενώ δίνεται η δυνατότητα [[cpp:vector_overloading_binary_operators|υπερφόρτωσης]] για όλους τους μη βασικούς τύπους που θα χρειαστεί να κατασκευάσετε στα προγράμματα σας. Το παρακάτω παράδειγμα γραψίματος στην κονσόλα (//stdout//) είναι ενδεικτικό. 
- 
-<code cpp stdout.cpp> 
-#include <iostream> 
- 
-using namespace std; 
- 
-int main() { 
-  string str("Welcome C++"); 
-  const double PI = 3.14159; 
-  const int SIZE = 256; 
-   
-  cout << str << " in CE325 course." << endl; 
-  cout << "Constant PI: " << PI << endl; 
-  cout << "SIZE is: " << SIZE << endl; 
-} 
-</code> 
- 
-====== Μεταβάλλοντας τη μορφοποίηση σε ένα stream ====== 
- 
-Μπορείτε να αλλάξετε τη μορφοποίηση σε ένα stream με τους εξής δύο τρόπους: 
-  * χρησιμοποιώντας τις συναρτήσεις μορφοποίησης **[[http://www.cplusplus.com/reference/ios/ios_base/setf/|setf]]** (θέτει ένα //flag// μορφοποίησης) και **[[http://www.cplusplus.com/reference/ios/ios_base/unsetf/|unsetf]]** (μηδενίζει ένα //flag// μορφοποίησης). 
-  * χρησιμοποιώντας μορφοποιητών (//manipulators//) για το //stream//. 
- 
-===== Χρήση συναρτήσεων μορφοποίησης ===== 
- 
-Ας υποθέσουμε ότι σε ένα //stream// θέλουμε η αριθμοί να εκτυπώνονται σε δεκαεξαδική μορφή. Προκειμένου να το πετύχουμε αυτό, θα πρέπει να κάνουμε τα εξής: 
- 
-<code cpp ostream-setf.cpp> 
-#include <iostream> 
-using namespace std; 
- 
-int main() { 
-  cout.setf(std::ios::hex); 
-  //cout.unsetf(std::ios::dec); 
-  cout << 16 << endl; 
-} 
-</code> 
- 
-O παραπάνω κώδικας δεν δουλεύει σωστά, διότι είναι απαραίτητη και η γραμμή που είναι σε σχόλια προκειμένου να δουλέψει σωστά η μορφοποίηση. Στην πράξη, θα πρέπει εκτός από το να θέσουμε το //flag// ''std::ios::hex'' να καθαρίσουμε και το //flag// ''std::ios::dec''. Ο λόγος είναι ότι το  //flag// ''std::ios::dec'' έχει μεγαλύτερη προτεραιότητα, και όσο είναι ενεργό οι αριθμοί εξακολουθούν να εκτυπώνονται σε δεκαδική μορφή. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε την παρακάτω μορφή της συνάρτησης **setf**. 
- 
-<code cpp ostream-setf2.cpp> 
-#include <iostream> 
-using namespace std; 
- 
-int main() { 
-  cout.setf(std::ios::hex, std::ios::basefield); 
-  cout << 16 << endl; 
-} 
-</code> 
- 
-Η συγκεκριμένη μορφή της **set**, στην 1η παράμετρο λαμβάνει τα //flags// που θα ενεργοποιηθούν (εάν υπάρχουν περισσότερα του ενός, χρησιμοποιείτε τον δυαδικό τελεστή OR (|)) και στην 2η παράμετρο λαμβάνει το //group// των //flags// τα οποία θα μηδενιστούν, πριν ενεργοποιηθούν τα //flags// που ορίζονται στην 1η παράμετρο. 
- 
-===== Χρήση μορφοποιητών (//manipulators//) ===== 
- 
-Η C++ δίνει τη δυνατότητα χρήσης μορφοποιητών, οι οποίοι επιτυγχάνουν το ίδιο ακριβώς αποτέλεσμα με τις συναρτήσεις **setf** και **unsetff**. Για παράδειγμα το προηγούμενο πρόγραμμα μπορεί να γραφεί με χρήση μορφοποιητών ως εξής: 
- 
-<code cpp ostream-manipulators.cpp> 
-#include <iostream> 
-using namespace std; 
- 
-int main() { 
-  cout << std::hex << 16 << endl; 
-  cout << std::oct << 16 << endl; 
-  cout << std::dec << 16 << endl; 
-} 
-</code> 
- 
-Στη συγκεκριμένη περίπτωση ο μορφοποιητής, θέτει και μηδενίζει τα //flags// που είναι απαραίτητα ώστε να εκτυπωθεί το περιεχόμενο σε δεκαεξαδική μορφή. 
- 
-===== Επιλογές μορφοποίησης ενός ostream ===== 
- 
-Τα βασικά //flags// και οι βασικοί μορφοποιητές για τα //flags// αυτά δίνονται παρακάτω: 
- 
-==== std::ios::boolalpha ==== 
- 
-^ Group ^ Flag ^ Επεξήγηση ^ 
-| | ''std:ios::boolalpha'' | Εάν το //flag// είναι ενεργό τυπώνει "true"/"false" αντί για "1"/"0" | 
- 
-^ Μορφοποιητής ^ Επεξήγηση ^ 
-| ''std::boolalpha'' | Εκτυπώνει "true"/"false". | 
-| ''std::noboolalpha'' | Εκτυπώνει "1"/"0". | 
- 
-<code cpp boolalpha.cpp> 
-#include <iostream> 
-using namespace std; 
- 
-int main() { 
-  cout << std::boolalpha << true <<"/"<< false << endl; 
-  cout << std::noboolalpha << true <<"/"<< false << endl; 
-} 
-</code> 
- 
  
cpp/osteams.txt · Last modified: 2020/05/17 18:10 (external edit)