User Tools

Site Tools


cpp:osteams

This is an old revision of the document!


Output Streams

Όπως προαναφέρθηκε τα streams εισόδου χρησιμοποιούν τον τελεστη » (stream insertion operator) για την ανάγνωση από το stream. Σε αναλογία με τα input streams, η standard βιβλιοθήκη παρέχει συναρτήσεις υπεφόρτωσης για τους βασικούς τύπους δεδομένων, ενώ δίνεται η δυνατότητα υπερφόρτωσης για όλους τους μη βασικούς τύπους που θα χρειαστεί να κατασκευάσετε στα προγράμματα σας. Το παρακάτω παράδειγμα γραψίματος στην κονσόλα (stdout) είναι ενδεικτικό.

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;
}

Μεταβάλλοντας τη μορφοποίηση σε ένα stream

Μπορείτε να αλλάξετε τη μορφοποίηση σε ένα stream με τους εξής δύο τρόπους:

  • χρησιμοποιώντας τις συναρτήσεις μορφοποίησης setf (θέτει ένα flag μορφοποίησης) και unsetf (μηδενίζει ένα flag μορφοποίησης).
  • χρησιμοποιώντας μορφοποιητών (manipulators) για το stream.

Χρήση συναρτήσεων μορφοποίησης

Ας υποθέσουμε ότι σε ένα stream θέλουμε η αριθμοί να εκτυπώνονται σε δεκαεξαδική μορφή. Προκειμένου να το πετύχουμε αυτό, θα πρέπει να κάνουμε τα εξής:

ostream-format.cpp
#include <iostream>
using namespace std;
 
int main() {
  cout.setf(std::ios::hex);
  //cout.unsetf(std::ios::dec);
  cout << 16 << endl;
}

O παραπάνω κώδικας δεν δουλεύει σωστά, διότι είναι απαραίτητη και η γραμμή που είναι σε σχόλια προκειμένου να δουλέψει σωστά η μορφοποίηση. Στην πράξη, θα πρέπει εκτός από το να θέσουμε το flag std::ios::hex να καθαρίσουμε και το flag std::ios::dec. Ο λόγος είναι ότι το flag std::ios::dec έχει μεγαλύτερη προτεραιότητα, και όσο είναι ενεργό οι αριθμοί εξακολουθούν να εκτυπώνονται σε δεκαδική μορφή. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε την παρακάτω μορφή της συνάρτησης setf.

ostream-format.cpp
#include <iostream>
using namespace std;
 
int main() {
  cout.setf(std::ios::hex, std::ios::basefield);
  cout << 16 << endl;
}

Η συγκεκριμένη μορφή της set, στην 1η παράμετρο λαμβάνει τα flags που θα ενεργοποιηθούν (εάν υπάρχουν περισσότερα του ενός, χρησιμοποιείτε τον δυαδικό τελεστή OR (|)) και στην 2η παράμετρο λαμβάνει το group των flags τα οποία θα μηδενιστούν, πριν ενεργοποιηθούν τα flags που ορίζονται στην 1η παράμετρο.

cpp/osteams.1558253681.txt.gz · Last modified: 2019/05/19 07:14 (external edit)