ios (C++)

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

Το ios είναι μια πρότυπη βιβλιοθήκη της C++, η οποία ορίζει διάφορους τύπους και συναρτήσεις για την λειτουργικότητα των iostreams. Το αρχείο επικεφαλίδας #include <ios> αυτόματα χρησιμοποιείται από την βιβλιοθήκη iostream και οι προγραμματιστές πολύ σπάνια το καλούν μέσα στο κώδικά τους.[1]

Μέλη[Επεξεργασία | επεξεργασία κώδικα]

Ορισμοί τύπων[Επεξεργασία | επεξεργασία κώδικα]

Όνομα Περιγραφή
ios Υποστήριξη στην κλάση ios από την παλαιότερη βιβλιοθήκη iostream.
streamoff Υποστήριξη εσωτερικών λειτουργιών.
streampos Αποθηκεύει την τωρινή θέση ενός δείκτη μέσα στην προσωρινή μνήμη (buffer) ή τη θέση μέσα στο αρχείο.
streamsize Ορίζει το μέγεθος της ροής δεδομένων.
wios Υποστήριξη της κλάσης wios από τη παλαιότερη βιβλιοθήκη iostream.
wstreampos Αποθηκεύει την τωρινή θέση ενός δείκτη μέσα στην προσωρινή μνήμη (buffer) ή τη θέση μέσα στο αρχείο (η wstreampos αναφέρεται σε ροή δεδομένων τύπου wchar_t - wide char).

Επιλογές[Επεξεργασία | επεξεργασία κώδικα]

Οι παρακάτω επιλογές εφαρμόζονται σε ένα αντικείμενο ροής δεδομένων (stream object) και δεν επιβάλουν τα δεδομένα να γραφτούν ή να διαβαστούν αλλά αλλάζουν σημαίες μέσα στο αντικείμενο της ροής.[2]

Όνομα Περιγραφή
boolalpha Ορίζει τις λογικές μεταβλητές τύπου bool να εμφανίζονται ως "true" (αληθές) ή "false" (ψευδές) με μορφή αλφαριθμητικών μέσα στην ροή δεδομένων.
noboolalpha Ορίζει τις λογικές μεταβλητές τύπου bool να εμφανίζονται ως 1 ή 0 μέσα στην ροή δεδομένων.
showbase Ορίζει την εμφάνιση της βάσης αριθμητικού συστήματος στο οποίο ανήκει ο αριθμός.
noshowbase Απενεργοποιεί την εμφάνιση της βάσης (αριθμητικού συστήματος αριθμού).
showpoint Εμφανίζει ακέραιο μέρος δεκαδικού αριθμού μαζί με τα δεκαδικά ψηφία, ακόμη και στην περίπτωση που τα δεκαδικά ψηφία είναι μηδέν.
noshowpoint Εμφανίζει μόνο τα ψηφία του δεκαδικού μέρους τα οποία δεν είναι μηδέν σε ένα δεκαδικό αριθμό.
showpos Ορίζει οι θετικοί αριθμοί να εμφανίζονται με πρόσημο.
noshowpos Επιβάλει οι θετικοί αριθμοί να μην εμφανίζουν πρόσημο.
skipws Επιβάλει όλα τα κενά (whitespaces: κενό ' ', tab '\t', newline '\n') να αγνοούνται.
noskipws Επιβάλει να μην αγνοούνται από το διάβασμα τα κενά.
uppercase Επιβάλει τα δεκαεξαδικά ψηφία και ο εκθέτης σε επιστημονικό συμβολισμό να εμφανίζεται σε κεφαλαία ψηφία (0X και Ε).
nouppercase Ορίζει τα δεκαεξαδικά ψηφία και ο εκθέτης σε ένα επιστημονικό συμβολισμό να εμφανίζονται σε πεζά ψηφία (0x και e).
dec Ορίζει αν οι ακέραιες μεταβλητές τύπου int εμφανίζονται σε 10αδικό συμβολισμό.
hex Ορίζει αν οι ακέραιες μεταβλητές εμφανίζονται σε 16αδικό συμβολισμό.
oct Ορίζει οι ακέραιες μεταβλητές να εμφανίζονται σε οκταδικό συμβολισμό.
left Ορίζει όταν το κείμενο δεν έχει πλάτος όπως αυτό έχει οριστεί στην έξοδο να εμφανίζεται στην ροή με κενό στα αριστερά.
right Ορίζει ώστε το κείμενο του οποίου το πλάτος είναι μικρότερο από πλάτος το οποίο έχει οριστεί για την έξοδο, να εμφανίζεσαι στη ροή με κενά από τα δεξιά.
internal Ορίζει αν το πρόσημο του αριθμού βρίσκεται στα αριστερά και ο αριθμός στα δεξιά.
fixed Ορίζει αν οι μεταβλητές δεκαδικών αριθμών τύπου float εμφανίζονται με σταθερό μέγεθος δεκαδικών ψηφίων.
scientific Ορίζει οι δεκαδικοί αριθμοί να εμφανίζονται με επιστημονικό συμβολισμό.
flush Αδειάζει την προσωρινή μνήμη εξόδου.
ends Εισάγει ένα χαρακτήρα τύπου null '\0' και κατόπιν αδειάζει την προσωρινή μνήμη εξόδου.
endl Εισάγει ένα χαρακτήρα αλλαγής γραμμής '\n' και κατόπιν αδειάζει την προσωρινή μνήμη εξόδου.
ws αγνοεί "τρώει" όλα τα κενά-whitespaces
unitbuf Επιβάλει η έξοδος να επεξεργάζεται όταν η προσωρινή μνήμη αποθήκευσης (buffer) δεν είναι άδεια.
nounitbuf Επιβάλει η έξοδος να μπαίνει σε μια προσωρινή μνήμη (buffer) και να επεξεργάζεται όταν η προσωρινή μνήμη γεμίζει.

Κλάσεις[Επεξεργασία | επεξεργασία κώδικα]

Όνομα περιγραφή
basic_ios Αυτή είναι με κλάση πρότυπο (template class) η οποία ορίζει τον αποθηκευτικό χώρο αλλά και τις μεθόδους διεπαφής για τις ροές εισόδου (κλάση basic_istream) και για τις ροές εξόδου (κλάση basic_ostream). Η ροή εξαρτάται από τις παραμέτρους της κλάσης.
fpos Αυτή είναι μια κλάση πρότυπο που περιέχει όλες ιτς πληροφορίες που χρειάζεται κάποιος να προσπελάσει μια τυχαία θέση μέσα σε μια ροή δεδομένων.
ios_base Αυτή η κλάση περιέχει τον αποθηκευτικό χώρο και τις μεθόδους διεπαφής για είσοδο και έξοδο στις ροές δεδομένων οι οποίες δεν εξαρτώνται από τις παραμέτρους του πρότυπου.

Παραδείγματα[Επεξεργασία | επεξεργασία κώδικα]

Στο παρακάτω παράδειγμα επιλέγουμε σε μια ροή δεδομένων εισόδου από το πληκτρολόγιο να αγνοηθούν τα whitespaces (χαρακτήρες τύπου απλού κενού, tab '\t' και αλλαγής γραμμής '\n'). Η αγνόηση των whitespaces είναι προεπιλογή στις ροές δεδομένων.[3]:

#include <iostream>    // το iostream συμπεριλαμβάνει και το #include <ios>
#include <string>

using namespace std;

int main() {
   string s1, s2, s3;
   cout << "Είσοδος τρία αλφαριθμητικά: ";
   cin >> skipws >> s1 >> s2 >> s3;            // με το skipws επιβάλλεται στην ροή εισόδου από το πληκτρολόγιο
                                               // cin να αγνοηθούν τα τυχόν whitespaces που θα εισάγει ο χρήστης
                                               // στο stream είναι προεπιλεγμένο το skipws
   cout << "." << s1  << "." << endl;          
   cout << "." << s2 << "." << endl;
   cout << "." << s3 << "." << endl; 
   
   return 0;
}

Στο παρακάτω παράδειγμα επιλέγουμε να μην αγνοούνται τα whitespaces και θα δούμε διάβασμα από μια ροή δεδομένων μέσω μνήμης (string stream) [4]:

#include <iostream>       // συμπεριλαμβάνει το #include <ios> και για το cin, cout
#include <sstream>        // για την ροή δεδομένων αλφαριθμητικού (στη μνήμη) istringstream

using namespace std;

int main () {
  char a, b, c, d;

  istringstream iss ("\n\t 123    4");
  iss >> noskipws >> a >> b >> c >> d;    // διάβασέ τα όλα, συμπεριλαμβανομένων και των whitespace

  // ισοδυναμεί με cout << "\n << '-' << '\t' << '-' << ' ' << '-' << '1' << endl;
  cout << a << "-" << b << "-" << c << "-"  << d << endl;

  iss >> skipws >> a >> b >> c;           // αγνοούνται τα whitespaces
  cout << a << b << c << endl;            // εμφανίζεται το "234" και όχι το "23 "

  return 0;
}

Στο παρακάτω παράδειγμα αλλάζουμε την ροή εξόδου ώστε στην έξοδο να εμφανίζεται η λογική μεταβλητή με το αλφαριθμητικό "true" ή "false" και όχι ως "1" ή "0" [2]:

#include <iostream>

using namespace std;

int main() {
   bool bool_variable=true;
   cout << "Η έξοδος της λογικής μεταβλητής είναι: " << bool_variable << endl;    // εμφανίζει "1"
   cout << "Η έξοδος της λογικής μεταβλητής μετά την σημαία boolalpha: "  
        << boolalpha << bool_variable;                                            // εμφανίζει "true"

   return 1;
}

Παραπομπές[Επεξεργασία | επεξεργασία κώδικα]

  1. «<ios> Visual Studio 2010». Microsoft MSDN: Visual Studio 2010. Ανακτήθηκε στις 28 Σεπτεμβρίου 2011. 
  2. 2,0 2,1 Stanley B. Lippman· Josee Lajoie (1999). C++ Primer (3η έκδοση). Massachusetts: Addison-Wesley. σελίδες 1112-1120. ISBN 0-201-82470-1. 
  3. «noskipws». Microsoft MSDN documentation: Visual Studio .NET 2003. Ανακτήθηκε στις 28 Σεπτεμβρίου 2011. 
  4. «noskipws». cplusplus.com. Αρχειοθετήθηκε από το πρωτότυπο στις 3 Οκτωβρίου 2011. Ανακτήθηκε στις 28 Σεπτεμβρίου 2011.