Programming | C / C++ » Az IOSTREAM csomag

Datasheet

Year, pagecount:2009, 12 page(s)

Language:Hungarian

Downloads:308

Uploaded:February 14, 2010

Size:35 KB

Institution:
-

Comments:

Attachment:-

Download in PDF:Please log in!



Comments

No comments yet. You can be the first!

Content extract

IOSTREAM csomag Mint láthattuk C++ -ban a nyomtatás (kiírás) és beolvasás egy picit másképpen történik. A cin és a cout „csatornákat” használjuk melyekbe átirányítunk és melyekből kiolvasunk adatokat. A kimenet vagy bemenet eredményét többféleképpen lehet módosítani. Itt is vannak formátum jelek, melyeket egy függvénynek megadhatunk. Ugyanakkor „manipulátorokat” is használhatunk, melyeket szintén „betölthetünk” a cout vagy a cin „csatornába”. A manipulátorok használatához az iomanip include file-t kell betölteni. Például: #include <iomanip> A manipulátorok az ios csomagban vannak így a nevük előtt ios-t kell használni, nem az std csomag nevét. Az ios név és a hatókör operátor (std::) cs Manipulátorok · · · · · · · · · · · · · · · · · · · boolalpha – a nyomtatásnál a bool értékeket szövegesen nyomtatja ki dec – a megjelenítésnél vagy beolvasásnál a decimális formátumot

használjuk endl – kinyomtat egy új sor karaktert és a buffert is üríti ends – nyomtatásnál a szöveg végére egy lezáró karakterk nyomtat (’’) fixed – a valós számokat tizedes ponttal jeleníti meg, nem a tudományos formátumban (például: 12.25) Akkor is használni kell, ha a tizedes pont utáni számok számát akarjuk szabályozni a „precision” manipulátorral! flush – a nyomtatási buffert üríti (flush) hex – a számokat hexidecimális formátumban olvassa be vagy nyomtatja ki internal – a negatív előjel és a szám közé kitöltő karaktereket nyomtat a rendszer. left – a nyomtatandó értéket balra igazítja a mezőben noboolalpha - a nyomtatásnál a bool értékeket nem szövegesen nyomtatja ki noshowpoint – a showpoint manipulátorral ellentétes noshowpos – a showpos manipulátorral ellentétes noshowbase – a showbase manipulátorral ellentétes noskipws – a skipws manipulátorral ellentétes nouppercase – az uppercase

manipulátorral ellentétes oct – a számokat oktális formátumban olvassa be vagy nyomtatja ki right – a nyomtatandó értéket jobbra igazítja a mezőben scientific – a számokat tudományos formátumban jeleníti meg (például: 1.24e+5) setbase(int b) – ezzel a manipulátorral lehet beállítani a számrendszert, 8, 10, 16 · · · setfill(int ch) – ezzel a manipulátorral lehet megadni azt a karaktert amit a rendszer akkor használjon, ha a nyomtatandó adat nem tölti ki a mezőt. Alapesetben ez a space karakter. setprecision(int width) – a valós számok megjelenítésénél a tizedes pont utáni számok számát adja meg setw(int width) – a manipulátor adja meg hogy a következő kiiratásra mekkora mező áll rendelkezésre. A manipulátor a beolvasásnál is használható Például ezzel lehet meggátolni hogy több karaktert olvassunk be mint amennyi hely egy tömbben rendelkezésre áll: cin >> setw(sizeof(array)) >> array; · · · · ·

· showbase – a manipulátor használata után a számok elé a rendszer kiírja a számrendszernek megfelelő prefix-et. Hexadecimális szám esetén a prefix : 0x. Oktális szám esetén a prefix: 0 Decimális szám esetén nincs prefix showpoint – a manipulátor használata után, egy valós szám után egy tizedes pontot és nullákat nyomtat a rendszer. showpos – a manipulátor használata után a pozitív számok elé egy plusz jelet nyomtat a rendszer skipws – ezt a manipulátort stream-eknél, folyamoknál használjuk. A manipulátor hatására a white-space (space, enter, TAB, etc.) karaktereket a rendszer átugorja beolvasásnál. uppercase – számok nyomtatásánál a betűket nagy betűvel nyomtatja, pl. a hexadecimális számnál az ’X’, valós számnál ’E’ ws – ez a manipulár beolvas minden white-space karaktert mely az input bufferben az adott pozíciónál található Mintapéldák A manipulátorokat kétféleképpen is meg tudjuk adni. Az

első esetben egy „függvényszerű” hívással végezzük el a módosítást. A másik esetben a manipulátort közvetlenül a „csatornába töltjük”. 1. Első feladatként nyomtassunk ki egy számot hexadecimális alakban kétféle módon. Az első esetben a szám előtt megjelenítjük a „0x” prefixet mely a hexadecimális számokat jelöli. A második esetben csak a szám jelenik a prefix nem. #include <iostream> using namespace std; int main () { // hexadecimális számot nyomtatunk cout.setf ( ios::hex, ios::basefield ); // jelenítsük meg a prefixet cout.setf ( ios::showbase ); cout << 100 << endl; // bár hexadecimális a szám, de nem nyomtatunk prefixet cout.setf ( 0, ios::showbase ); cout << 100 << endl; return 0; } A program eredménye: 0x64 64 2. Írjuk meg az előző programot egyszerűbben A manipulátorokat közvetlenül töltsük a „csatornába”. #include <iostream> using namespace std; int main () { int n; n=20;

cout << hex << showbase << n << endl; cout << hex << noshowbase << n << endl; return 0; } A program ereménye: 0x14 14 3. A következő program a bool értéket írjuk ki szövegesen illetve számszerűen: #include <iostream> using namespace std; int main () { bool b; b=true; cout << boolalpha << b << endl; cout << noboolalpha << b << endl; return 0; } A program ereménye: true 1 4. Ez a program a shopoint manipulátor használatát szemlélteti: #include <iostream> using namespace std; int main () { double a, b, pi; a=30.0; b=10000.0; pi=3.1416; cout.precision (5); cout << showpoint << a << << b; cout << << pi << endl; cout << noshowpoint << a << << b; cout << << pi << endl; return 0; } A program eredménye: 30.000 30 10000. 10000 3.1416 3.1416 5. A következő program a showpos manipulátor

használatát mutatja be: #include <iostream> using namespace std; int main () { signed int p, z, n; p=1; z=0; n=-1; cout << showpos << cout << << n << cout << noshowpos << cout << << n << return 0; } p << << z; endl; p << << z; endl; A program eredménye: +1 1 +0 0 -1 -1 6. Ez a program a nagy betűvé és kis betűvé való konvertálást szemléltei: #include <iostream> using namespace std; int main () { cout << showbase << hex; cout << uppercase << 77 << endl; cout << nouppercase << 77 << endl; return 0; } A program eredménye: 0X4D 0x4d 7. Ez a program a számok különböző ábrázolási módjait szemlélteti: #include <iostream> using namespace std; int main () { double a,b,c; a = 3.1415926534; b = 2006.0; c = 1.0e-10; cout.precision(5); cout << a << << b << << c << endl;

cout << fixed << a << << b << << c << endl; cout << scientific << a << << b << << c << endl; return 0; } A program eredménye: 3.1416 3.14159 3.14159e+000 2006 2006.00000 2.00600e+003 1e-010 0.00000 1.00000e-010 8. Nézzük meg hogyan működnek az igazító manipulátorok a következő programban: #include <iostream> using namespace std; int main () { int n; n=-77; cout.width(6); cout << internal << n << endl; cout.width(6); cout << left << n << endl; cout.width(6); cout << right << n << endl; return 0; } A program eredménye: 77 -77 -77 9. Nézzük meg, hogy hogyan lehet a kitöltésre használt karaktert megváltoztatni #include <iostream> #include <iomanip> using namespace std; int main () { cout << setfill (x) << setw (10); cout << 77 << endl; return 0; } A program eredménye:

xxxxxxxx77 10. A számok ábrázolási szélességére is nézzünk egy példát: #include <iostream> #include <iomanip> using namespace std; int main () { double f =3.14159; cout << setprecision cout << setprecision cout << fixed; cout << setprecision cout << setprecision return 0; } (5) << f << endl; (9) << f << endl; (5) << f << endl; (9) << f << endl; A program eredménye: 3.1416 3.14159 3.14159 3.141590000 11. Ha a skipws manipulátor használatát szeretnénk megnézni, akkor a következő programot kell lefuttatni: #include <iostream> using namespace std; int main () { char a, b, c; cin >> skipws >> a >> b >> c; cout << a << b << c << endl; cin >> noskipws >> a >> b >> c; cout << a << b << c << endl; return 0; } Ha a parancssorba a következőt gépeljük (2 SPACE és az 1, 2 és 3-as

számok) 123 123 Akkor a program eredménye: 123 1 12. Végül próbáljuk ki az alábbi komplex programot és nézzük meg az eredményét #include <iostream> #include <iomanip> using namespace std; const const const const const const const const const const int double d1 = 1.23456789; double d2 = 12.3456789; double d3 = 123.456789; double d4 = 1234.56789; double d5 = 12345.6789; long l1 = 16; long l2 = 256; long l3 = 1024; long l4 = 4096; long l5 = 65536; base = 10; void DisplayDefault( ) { cout << endl << "default cout << "d1 = " << d1 << cout << "d2 = " << d2 << cout << "d3 = " << d3 << cout << "d4 = " << d4 << cout << "d5 = " << d5 << } void DisplayWidth( { cout << endl << cout << "d1 = " cout << "d2 = " cout << "d3 = " cout << "d4 =

" cout << "d5 = " } display" << endl; endl; endl; endl; endl; endl; int n ) "fixed width display set to " << n << ". "; << setw(n) << d1 << endl; << setw(n) << d2 << endl; << setw(n) << d3 << endl; << setw(n) << d4 << endl; << setw(n) << d5 << endl; void DisplayLongs( ) { cout << setbase(10); cout << endl << "setbase(" << base << ")" << endl; cout << setbase(base); cout << "l1 = " << l1 << endl; cout << "l2 = " << l2 << endl; cout << "l3 = " << l3 << endl; cout << "l4 = " << l4 << endl; cout << "l5 = " << l5 << endl; } int main( int argc, char* argv[] ) { DisplayDefault( ); cout << endl << "setprecision("

<< 3 << ")" << setprecision(3); DisplayDefault( ); cout << endl << "setprecision(" << 12 << ")" << setprecision(12); DisplayDefault( ); cout << setiosflags(ios base::scientific); cout << endl << "setiosflags(" << ios base::scientific << ")"; DisplayDefault( ); cout << resetiosflags(ios base::scientific); cout << endl << "resetiosflags(" << ios base::scientific << ")"; DisplayDefault( ); cout << endl << "setfill(" << S << ")" << setfill(S); DisplayWidth(15); DisplayDefault( ); cout << endl << "setfill(" << << ")" << setfill( ); DisplayWidth(15); DisplayDefault( ); cout << endl << "setprecision(" << 8 << ")" << setprecision(8); DisplayWidth(10); DisplayDefault( );

base = 16; DisplayLongs( ); base = 8; DisplayLongs( ); base = 10; DisplayLongs( ); return } 0; A program eredménye: default display d1 = 1.23457 d2 = 12.3457 d3 = 123.457 d4 = 1234.57 d5 = 12345.7 setprecision(3) default display d1 = 1.23 d2 = 12.3 d3 = 123 d4 = 1.23e+003 d5 = 1.23e+004 setprecision(12) default display d1 = 1.23456789 d2 = 12.3456789 d3 = 123.456789 d4 = 1234.56789 d5 = 12345.6789 setiosflags(4096) default display d1 = 1.234567890000e+000 d2 = 1.234567890000e+001 d3 = 1.234567890000e+002 d4 = 1.234567890000e+003 d5 = 1.234567890000e+004 resetiosflags(4096) default display d1 = 1.23456789 d2 = 12.3456789 d3 = 123.456789 d4 = 1234.56789 d5 = 12345.6789 setfill(S) fixed width display set to 15. d1 = SSSSS1.23456789 d2 = SSSSS12.3456789 d3 = SSSSS123.456789 d4 = SSSSS1234.56789 d5 = SSSSS12345.6789 default display d1 = 1.23456789 d2 d3 d4 d5 = = = = 12.3456789 123.456789 1234.56789 12345.6789 setfill( ) fixed width display set to 15. d1 = 1.23456789 d2 =

12.3456789 d3 = 123.456789 d4 = 1234.56789 d5 = 12345.6789 default display d1 = 1.23456789 d2 = 12.3456789 d3 = 123.456789 d4 = 1234.56789 d5 = 12345.6789 setprecision(8) fixed width display set to 10. d1 = 1.2345679 d2 = 12.345679 d3 = 123.45679 d4 = 1234.5679 d5 = 12345.679 default display d1 = 1.2345679 d2 = 12.345679 d3 = 123.45679 d4 = 1234.5679 d5 = 12345.679 setbase(16) l1 = 10 l2 = 100 l3 = 400 l4 = 1000 l5 = 10000 setbase(8) l1 = 20 l2 = 400 l3 = 2000 l4 = 10000 l5 = 200000 setbase(10) l1 = 16 l2 l3 l4 l5 = = = = 256 1024 4096 65536