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
Next revision Both sides next revision
cpp:osteams [2019/05/21 20:46]
gthanos [Χρήση μορφοποιητών (manipulators)]
cpp:osteams [2020/05/17 19:04]
gthanos [std::ios::floatfield]
Line 19: Line 19:
 </code> </code>
  
-====== Μεταβάλλοντας τη μορφοποίηση σε ένα stream ======+====== Μεταβολή της μορφοποίησης σε ένα stream ======
  
 Μπορείτε να αλλάξετε τη μορφοποίηση σε ένα stream με τους εξής δύο τρόπους: Μπορείτε να αλλάξετε τη μορφοποίηση σε ένα stream με τους εξής δύο τρόπους:
-  * χρησιμοποιώντας τις συναρτήσεις μορφοποίησης **[[http://www.cplusplus.com/reference/ios/ios_base/setf/|setf]]** (θέτει ένα //flag// μορφοποίησης) και **[[http://www.cplusplus.com/reference/ios/ios_base/unsetf/|unsetf]]** (μηδενίζει ένα //flag// μορφοποίησης). +  * χρησιμοποιώντας τις συναρτήσεις μορφοποίησης **[[http://www.cplusplus.com/reference/ios/ios_base/setf/|setf]]** (ενεργοποιεί ένα //flag// που συνδέεται με μία επιλογή μορφοποίησης) και **[[http://www.cplusplus.com/reference/ios/ios_base/unsetf/|unsetf]]** (απενεργοποιεί ένα //flag// που συνδέεται με μία επιλογή μορφοποίησης). 
-  * χρησιμοποιώντας μορφοποιητών (//manipulators//για το //stream//.+  * χρησιμοποιώντας μορφοποιητές (//manipulators//πάνω στο //stream//.
  
 ===== Χρήση συναρτήσεων μορφοποίησης ===== ===== Χρήση συναρτήσεων μορφοποίησης =====
Line 40: Line 40:
 </code> </code>
  
-O παραπάνω κώδικας δεν δουλεύει σωστά, διότι είναι απαραίτητη και η γραμμή που είναι σε σχόλια προκειμένου να δουλέψει σωστά η μορφοποίηση. Στην πράξη, θα πρέπει εκτός από το να θέσουμε το //flag// ''std::ios::hex'' να καθαρίσουμε και το //flag// ''std::ios::dec''. Ο λόγος είναι ότι το  //flag// ''std::ios::dec'' έχει μεγαλύτερη προτεραιότητα, και όσο είναι ενεργό οι αριθμοί εξακολουθούν να εκτυπώνονται σε δεκαδική μορφή. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε την παρακάτω μορφή της συνάρτησης **setf**.+O παραπάνω κώδικας δεν δουλεύει σωστά, διότι είναι απαραίτητη και η γραμμή που είναι σε σχόλια. Στην πράξη, θα πρέπει εκτός από το να θέσουμε το //flag// ''std::ios::hex'' να καθαρίσουμε και το //flag// ''std::ios::dec''. Ο λόγος είναι ότι το  //flag// ''std::ios::dec'' έχει μεγαλύτερη προτεραιότητα, και όσο είναι ενεργό οι αριθμοί εξακολουθούν να εκτυπώνονται σε δεκαδική μορφή. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε την παρακάτω μορφή της συνάρτησης **setf**.
  
 <code cpp ostream-setf2.cpp> <code cpp ostream-setf2.cpp>
Line 48: Line 48:
 int main() { int main() {
   cout.setf(std::ios::hex, std::ios::basefield);   cout.setf(std::ios::hex, std::ios::basefield);
-  cout << 16 << endl;+  cout << "0x" <<16 << endl;
 } }
 </code> </code>
Line 56: Line 56:
 ===== Χρήση μορφοποιητών (manipulators) ===== ===== Χρήση μορφοποιητών (manipulators) =====
  
-Η C++ δίνει τη δυνατότητα χρήσης μορφοποιητών, οι οποίοι επιτυγχάνουν το ίδιο ακριβώς αποτέλεσμα με τις συναρτήσεις **setf** και **unsetf**. Για παράδειγμα το προηγούμενο πρόγραμμα μπορεί να γραφεί με χρήση μορφοποιητών ως εξής:+Η C++ δίνει τη δυνατότητα χρήσης μορφοποιητών, οι οποίοι επιτυγχάνουν το ίδιο ακριβώς αποτέλεσμα με τις συναρτήσεις **setf** και **unsetf** και χρησιμοποιούνται ευρέως. Για παράδειγμα το προηγούμενο πρόγραμμα μπορεί να γραφεί με χρήση μορφοποιητών ως εξής:
  
 <code cpp ostream-manipulators.cpp> <code cpp ostream-manipulators.cpp>
Line 64: Line 64:
 int main() { int main() {
   cout << std::hex << 16 << endl;   cout << std::hex << 16 << endl;
 +  cout << 16 << endl;
   cout << std::oct << 16 << endl;   cout << std::oct << 16 << endl;
 +  cout << 16 << endl;
   cout << std::dec << 16 << endl;   cout << std::dec << 16 << endl;
 } }
Line 153: Line 155:
      
   /* no special formatting specified */   /* no special formatting specified */
 +  cout << 0.00000123456789012345678 << endl;
 +  cout << 0.0000123456789012345678 << endl;
 +  cout << 0.000123456789012345678 << endl;
 +  cout << 0.00123456789012345678 << endl;
 +  cout << 0.0123456789012345678 << endl;
   cout << 0.123456789012345678 << endl;   cout << 0.123456789012345678 << endl;
   cout << 123.4567890123456789 << endl;   cout << 123.4567890123456789 << endl;
Line 158: Line 165:
   cout << 123456789.0123456789 << endl;   cout << 123456789.0123456789 << endl;
      
-  cout << fixed << endl; +  cout << std::fixed << endl; 
-  cout << setprecision(1) << 123.456 << endl; +  cout << std::setprecision(1) << 123.456 << endl; 
-  cout << setprecision(2) << 123.456 << endl; +  cout << std::setprecision(2) << 123.456 << endl; 
-  cout << setprecision(3) << 123.456 << endl; +  cout << std::setprecision(3) << 123.456 << endl; 
-  cout << setprecision(4) << 123.456 << endl; +  cout << std::setprecision(4) << 123.456 << endl; 
-  cout << setprecision(5) << 123.456 << endl; +  cout << std::setprecision(5) << 123.456 << endl; 
-  cout << setprecision(6) << 123.456 << endl; +  cout << std::setprecision(6) << 123.456 << endl; 
-  cout << setprecision(7) << 123.456 << endl;+  cout << std::setprecision(7) << 123.456 << endl;
      
-  cout << scientific << endl; +  cout << std::scientific << endl; 
-  cout << setprecision(1) << 123.456 << endl; +  cout << std::setprecision(1) << 123.456 << endl; 
-  cout << setprecision(2) << 123.456 << endl; +  cout << std::setprecision(2) << 123.456 << endl; 
-  cout << setprecision(3) << 123.456 << endl; +  cout << std::setprecision(3) << 123.456 << endl; 
-  cout << setprecision(4) << 123.456 << endl; +  cout << std::setprecision(4) << 123.456 << endl; 
-  cout << setprecision(5) << 123.456 << endl; +  cout << std::setprecision(5) << 123.456 << endl; 
-  cout << setprecision(6) << 123.456 << endl; +  cout << std::setprecision(6) << 123.456 << endl; 
-  cout << setprecision(7) << 123.456 << endl;+  cout << std::setprecision(7) << 123.456 << endl;
      
-  cout << showpoint << endl;+  cout << std::showpoint << endl;
   cout << 30 << " " <<  1000L << " " << 1000.00 << " " << 3.14159;   cout << 30 << " " <<  1000L << " " << 1000.00 << " " << 3.14159;
-  cout << noshowpoint << endl;+  cout << std::noshowpoint << endl;
   cout << 30 << " " << 1000L << " " << 1000.00 << " " << 3.14159;   cout << 30 << " " << 1000L << " " << 1000.00 << " " << 3.14159;
-  +  cout << endl;
 } }
 </code> </code>
Line 187: Line 194:
 Εάν δεν ορίσετε δικές σας παραμέτρους εκτύπωσης, οι αριθμοί κινητής υποδιαστολής εκτυπώνονται ως εξής: Εάν δεν ορίσετε δικές σας παραμέτρους εκτύπωσης, οι αριθμοί κινητής υποδιαστολής εκτυπώνονται ως εξής:
     * Εάν ο αριθμός έχει ακέραιο μέρος μεγαλύτερο απο 7 ψηφία, τότε εκτυπώνεται σε εκθετική μορφή.     * Εάν ο αριθμός έχει ακέραιο μέρος μεγαλύτερο απο 7 ψηφία, τότε εκτυπώνεται σε εκθετική μορφή.
 +    * Εάν ο αριθμός έχει ακέραιο μέρος μηδέν και δεκαδικό μέρος με τέσσερα (4) ή περισσότερα μηδενικά στην αρχή εκτυπώνεται σε εκθετική μορφή.
     * Σε αντίθετη περίπτωση,     * Σε αντίθετη περίπτωση,
       * ο αριθμός των εκτυπωσιμων ψηφίων είναι 7, χωρίς να υπολογίζουμε το πρόσημο, την υποδιαστολή και το 0 εάν η απόλυτη τιμή του αριθμού είναι μικρότερη του 1.       * ο αριθμός των εκτυπωσιμων ψηφίων είναι 7, χωρίς να υπολογίζουμε το πρόσημο, την υποδιαστολή και το 0 εάν η απόλυτη τιμή του αριθμού είναι μικρότερη του 1.
       * Εάν το δεκαδικό μέρος του αριθμού είναι μεγαλύτερο από όσο μπορεί να εκτυπωθεί από την παραπάνω σύμβαση, τότε αυτό αποκόπτεται μετά από στρογγυλοποίηση.       * Εάν το δεκαδικό μέρος του αριθμού είναι μεγαλύτερο από όσο μπορεί να εκτυπωθεί από την παραπάνω σύμβαση, τότε αυτό αποκόπτεται μετά από στρογγυλοποίηση.
 </WRAP> </WRAP>
cpp/osteams.txt · Last modified: 2020/05/17 18:10 (external edit)