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 revisionPrevious revision
Next revision
Previous revision
cpp:osteams [2019/05/21 20:46] – [Χρήση μορφοποιητών (manipulators)] gthanoscpp:osteams [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
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::showpoint << endl;
-  cout << setprecision(1) << 123.456 << endl; +
-  cout << setprecision(2) << 123.456 << endl; +
-  cout << setprecision(3) << 123.456 << endl; +
-  cout << setprecision(4) << 123.456 << endl; +
-  cout << setprecision(5) << 123.456 << endl; +
-  cout << setprecision(6) << 123.456 << endl; +
-  cout << setprecision(7) << 123.456 << endl; +
-   +
-  cout << scientific << endl; +
-  cout << setprecision(1) << 123.456 << endl; +
-  cout << setprecision(2) << 123.456 << endl; +
-  cout << setprecision(3) << 123.456 << endl; +
-  cout << setprecision(4) << 123.456 << endl; +
-  cout << setprecision(5) << 123.456 << endl; +
-  cout << setprecision(6) << 123.456 << endl; +
-  cout << setprecision(7) << 123.456 << endl; +
-   +
-  cout << 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;
 +  
 +  cout << std::fixed << endl;
 +  cout << std::setprecision(1) << 123.456 << endl;
 +  cout << std::setprecision(2) << 123.456 << endl;
 +  cout << std::setprecision(3) << 123.456 << endl;
 +  cout << std::setprecision(4) << 123.456 << endl;
 +  cout << std::setprecision(5) << 123.456 << endl;
 +  cout << std::setprecision(6) << 123.456 << endl;
 +  cout << std::setprecision(7) << 123.456 << endl;
      
 +  cout << std::scientific << endl;
 +  cout << std::setprecision(1) << 123.456 << endl;
 +  cout << std::setprecision(2) << 123.456 << endl;
 +  cout << std::setprecision(3) << 123.456 << endl;
 +  cout << std::setprecision(4) << 123.456 << endl;
 +  cout << std::setprecision(5) << 123.456 << endl;
 +  cout << std::setprecision(6) << 123.456 << endl;
 +  cout << std::setprecision(7) << 123.456 << endl;
 } }
 </code> </code>
Line 187: Line 194:
 Εάν δεν ορίσετε δικές σας παραμέτρους εκτύπωσης, οι αριθμοί κινητής υποδιαστολής εκτυπώνονται ως εξής: Εάν δεν ορίσετε δικές σας παραμέτρους εκτύπωσης, οι αριθμοί κινητής υποδιαστολής εκτυπώνονται ως εξής:
     * Εάν ο αριθμός έχει ακέραιο μέρος μεγαλύτερο απο 7 ψηφία, τότε εκτυπώνεται σε εκθετική μορφή.     * Εάν ο αριθμός έχει ακέραιο μέρος μεγαλύτερο απο 7 ψηφία, τότε εκτυπώνεται σε εκθετική μορφή.
 +    * Εάν ο αριθμός έχει ακέραιο μέρος μηδέν και δεκαδικό μέρος με τέσσερα (4) ή περισσότερα μηδενικά στην αρχή εκτυπώνεται σε εκθετική μορφή.
     * Σε αντίθετη περίπτωση,     * Σε αντίθετη περίπτωση,
       * ο αριθμός των εκτυπωσιμων ψηφίων είναι 7, χωρίς να υπολογίζουμε το πρόσημο, την υποδιαστολή και το 0 εάν η απόλυτη τιμή του αριθμού είναι μικρότερη του 1.       * ο αριθμός των εκτυπωσιμων ψηφίων είναι 7, χωρίς να υπολογίζουμε το πρόσημο, την υποδιαστολή και το 0 εάν η απόλυτη τιμή του αριθμού είναι μικρότερη του 1.
       * Εάν το δεκαδικό μέρος του αριθμού είναι μεγαλύτερο από όσο μπορεί να εκτυπωθεί από την παραπάνω σύμβαση, τότε αυτό αποκόπτεται μετά από στρογγυλοποίηση.       * Εάν το δεκαδικό μέρος του αριθμού είναι μεγαλύτερο από όσο μπορεί να εκτυπωθεί από την παραπάνω σύμβαση, τότε αυτό αποκόπτεται μετά από στρογγυλοποίηση.
 </WRAP> </WRAP>
cpp/osteams.1558471582.txt.gz · Last modified: 2019/05/21 19:46 (external edit)