Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Jazyk C++ Přednáška č.2 Proudy, manipulátory Práce se soubory
C++ Přednáška č.2
2
Manipulátory Bez parametrů (mohou být i jako bity v flags), patří do virtuální třídy ios S parametry (nutný iomanip) C++ Přednáška č.2
3
ios::flags Jsou to bity enum (ios enumerators) které lze kombinovat bitovou operací OR ( | ). Je to členská funkce std Flags parameter musí mít jednu z následujících hodnot: C++ Přednáška č.2
4
ios::flags (pokrač.) ios::skipws Přeskočit mezeru ve vstupním proudu
ios::left Zarovnat vlevo s použitím výplňových znaků ios::right Zarovnat vpravo s použitím výplňových znaků ios::internal Add fill characters after any leading sign or base indication, but before the value. ios::dec Číselný základ bude 10 (implicitní) ios::oct Číselný základ bude 8 (octal). ios::hex Číselný základ bude 16 (hexadecimal). ios::showbase Použít předponu 0 nebo 0x u oct/hex čísel ios::showpoint Použít desetinný zápis ios::uppercase V číslech používat velká písmena (u oct, hex, exponenty) ios::showpos použít znak + u kladných čísel. ios::scientific Čísla v plovoucí řádové čárce zobrazit ve vědeckém zápisu. ios::fixed Použít pevný formát u čísel v plovoucí řádové čárce. ios::unitbuf Cause ostream::osfx to flush the stream after each insertion. By default, cerr is unit buffered. ios::stdio Cause ostream::osfx to flush stdout and stderr after each insertion. C++ Přednáška č.2
5
#include <iostream> #include <iomanip>
#include <conio.h> #pragma hdrstop using namespace std; // #pragma argsused int main(int argc, char* argv[]) { int i=234; cout.setf(ios::showbase); // zaradi ox u hex a 0 u oct cout << hex << i << " = " << 123 << oct << 80 << endl; cout.setf(ios::left | ios::uppercase); // zarovnani vlevo + velka pismena cout.width(20); // cirka 20 - prvni cislo cout << hex << i << " = " << 123 << " --- " << oct << 80 << "<<" << endl; cout << hex << i << " = " << 123 << " --- " << oct << 80 << "<<" << endl; while(!kbhit()); return 0; } C++ Přednáška č.2
6
Funkce cout Další členské funkce
cout.width(25); //šířka datového výstupu cout.put(znak); // výstup jediného znaku cout.write(něco); // jako operátor << cout.fill(znak); // výplňový znak C++ Přednáška č.2
7
Příklad na funkce cout cout << "Zacatek >"; cout.width(25);
cout << 123 << "< Konec\n"; cout.fill('*'); // platí pro 1 následující údaj Vytiskne: Zacatek > < Konec Zacatek >**************123< Konec C++ Přednáška č.2
8
Seznam manipulátorů flush – vyprázdní výst. buffer
endl – konec řádku a vyprázdní buffer oct – výstup bude osmičkový dec – výstup bude dekadický hex – výstup bude hexa C++ Přednáška č.2
9
manipulátory, které vyžadují iomanip
setbase(základ) – nastavuje soustavu výstupu (0,10 – dec; 8- oct; 16 – hex) setw(šířka) – minim. šířka položky setfill(znak) – vyplňovací znak při definované šířce setprecision(přesnost) – přesnost u čísel v pohybl. řádové čárce C++ Přednáška č.2
10
manipulátory, které vyžadují iomanip (pokr.)
setiosflags(příznak) – nastavuje jeden nebo více příznaků resetiosflags(příznak) – resetuje jeden nebo více příznaků C++ Přednáška č.2
11
Příznaky ios v manipulátorech setiosflags a re setiosflags
ios::left zarovná výstup k zadané šířce doleva ios::right zarovná výstup k zadané šířce doprava ios::interval znaménko je zarovnané doleva, číslo doprava ios::dec desítkový výstup ios::oct osmičkový výstup C++ Přednáška č.2
12
Příznaky ios v manipulátorech setiosflags a resetiosflags (pokr.1)
ios::hex hexadecimální výstup ios::showbase přidá 0x k hexa a 0 k osmičkovým výstupům ios::showpoint přidá koncové nuly podle požadované přesnosti ios::uppercase šestnácková čísla a vědecký zápis používají velká písmena C++ Přednáška č.2
13
Příznaky ios v manipulátorech setiosflags a resetiosflags (pokr.2)
ios::showpos u kladnýchčísel bude + ios::scientific hodnota s pohyblivou des. čárkou se zobrazuje ve vědeckém zápisu (pouze exponent, nemusí být dělit.3) ios::fixed hodnota s pohyblivou des. čárkou se zobrazuje v desetinném zápisu Existují další, popis hledat s couboru ios a v dokumentaci překladače. C++ Přednáška č.2
14
Funkce pro cin cin.get() – nemá parametr, nelze spojovat
cin.get(znak) – lze spojovat C++ Přednáška č.2
15
Příklad int main() { char znak;
while ( (znak = std::cin.get()) != EOF) { std::cout << "znak: " << znak << std::endl; } std::cout << "\nHotovo!\n"; return 0; C++ Přednáška č.2
16
Výsledek příkladu: Ahoj - to jsme napsali na klávesnici znak: A
znak: h znak: o znak: j ^Z - tím musíme ukončit C++ Přednáška č.2
17
Další fukce cin cin.get(buff, délka) – ukonč. znak zůstává v zásobníku
cin.getline(buff,délka) – ukonč. znak se zahazuje; načte celý řádek včetně mezer C++ Přednáška č.2
18
Příklad cin.get(), cin.getline()
#include <iostream> using namespace std; int main() { char retezecJedna[256]; char retezecDva[256]; char retezecTri[256]; C++ Přednáška č.2
19
pokr. cout << "Zadejte prvni retezec: ";
cin.getline(retezecJedna,256); cout << "retezecJedna: " << retezecJedna << endl; cout << "Zadejte druhy retezec: "; cin >> retezecDva; cout << "retezecDva: " << retezecDva << endl; cout << "Zadejte treti retezec: "; cin.getline(retezecTri,256); cout << "retezecTri: " << retezecTri << endl; return 0; } C++ Přednáška č.2
20
Výsledek: Zadejte první retezec: jedna dva tri
retezecJedna: jedna dva tri Zadejte druhy retezec: ctyry pet šest retezecDva: ctyry Zadejte treti retezec: retezecTri: pet sest C++ Přednáška č.2
21
Funkce cin.ignore() cin.ignore(maxpočet,’\n’) – zahodí maximálně určený počet znaků až do konce řádku C++ Přednáška č.2
22
funkce peek() a putback()
cin.peek() – načte znak, ale ponechá jej ve vstupním proudu (můžeme jej načíst znovu) cin.putback() – vloží znak do vstupního proudu C++ Přednáška č.2
23
Příklad int main() { char znak; cout << "Zadejte vetu: ";
while ( cin.get(znak) ) { if (znak == '!') // vymění znak ! za $ cin.putback('$'); else cout << znak; while (cin.peek() == '#') // na4te znak, ale ponechá jej v proudu cin.ignore(1,'#'); } return 0; C++ Přednáška č.2
24
Výsledek: Zadejte vetu: Prave!ted#je!cas#pobavit!se#
(Vymění vykřičníky za dolar a vyhodí #) C++ Přednáška č.2
25
Práce se soubory knihovna <fstream>
ofstream fout(nazevSouboru);//otevřít pro zápis ifstream fin(nazevSouboru); //otevření pro čtení zavírání: fout.close(); fin.close(); C++ Přednáška č.2
26
Funkce pro práci se soubory
fout() - jako cout, ale do souboru fin.get(znak) fin.ignore(1,'\n'); fin.getline(buffer,255); C++ Přednáška č.2
27
Příklad práce se soubory
#include <fstream> #include <iostream> using namespace std; int main() { char nazevSouboru[80]; char buffer[255]; // pro zadání uživatele cout << "Nazev souboru: "; cin >> nazevSouboru; ofstream fout(nazevSouboru); // otevřít pro zápis fout << "Tento radek se primo zapise do souboru...\n"; cout << "Zadejte text souboru: "; C++ Přednáška č.2
28
cin.ignore(1,'\n'); // přeskočení znaku nového řádku za názvem souboru
cin.getline(buffer,255); // převzetí zadání uživatele fout << buffer << "\n"; // a jeho zápis do souboru fout.close(); // zavření souboru a příprava pro otevření ifstream fin(nazevSouboru); // otevření souboru pro čtení cout << "Zde mame obsah souboru:\n"; char znak; while (fin.get(znak)) cout << znak; cout << "\n***Konec obsahu souboru.***\n"; fin.close(); // pozornost se vždy vyplatí return 0; } C++ Přednáška č.2
29
Funkce pro práci se soubory
fout() - jako cout, ale do souboru fin.get(znak) fin.ignore(1,'\n'); fin.getline(buffer,255); C++ Přednáška č.2
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.