01
nuo 08
Naujas išeities būdas

C ++ išlaiko labai aukštą atgalinį suderinamumą su C, taigi
Ankstesnėje pamokoje apie tai buvo kalbama pavyzdžiu, kuriame buvo naudojamas apvadas. Pirmiausia pateksime į išvestį, nes ji labiau naudojama kaip įvestis.
„Iostream“ klasė suteikia prieigą prie objektų ir metodų, kurių jums reikia tiek išėjimui, tiek įėjimui. Pagalvokite apie i / o, kalbant apie baitų srautus - pereinant iš programos į failą, ekraną ar spausdintuvą - tai išvestis, arba iš klaviatūros - tai įvestis.
Išėjimas su Cout
Jei žinai C, gali tai žinoti << naudojamas bitams perkelti į kairę. Pvz., 3 << 3 yra 24. Pvz., Kairė pamaina dvigubina reikšmę, taigi 3 kairė pamaina padaugina ją iš 8.
C ++, << buvo perkrautas „ostream“ klasėje taip, kad tarpt, plūdė, ir stygų tipai (ir jų variantai, pvz dvigubai) visi palaikomi. Taip jūs išvedate tekstą, susiedami kelis elementus tarp <<.>
cout << „Some Text“ << intvalue << floatdouble << endl;
Ši savita sintaksė yra įmanoma, nes kiekvienas iš << iš tikrųjų yra funkcijos skambutis, kuris grąžina a nuoroda į srautą objektas. Taigi tokia linija, kaip aukščiau, yra tokia
cout. << ("šiek tiek teksto"). cout. << (intvalue) .cout. << (floatdouble) .cout. << (endl);
C funkcijaprintf galėjo suformatuoti išvestį naudodamas formatų specifikatorius, tokius kaip% d. C ++ programoje cout taip pat gali suformatuoti išvestį, tačiau naudoja kitokį būdą.
02
nuo 08
„Cout“ naudojimas formatuojant išvestį
Objektas cout yra „iostream“ biblioteka. Atminkite, kad tai turi būti įtraukta į
# įtraukti
Ši biblioteka „iostream“ yra kilęs iš ostream (išėjimui) ir istream už įvestį.
Formavimas teksto išvesties įterpiama manipuliatoriais į išvesties srautą.
Kas yra manipuliatorius?
Tai funkcija, galinti pakeisti išėjimo (ir įvesties) srauto charakteristikas. Ankstesniame puslapyje mes tai matėme << buvo perkrauta funkcija, kuri grąžino nuorodą į skambinantį objektą, pvz. cout išvesties arba cin įvesties. Visi manipuliatoriai tai daro, kad galėtumėte įtraukti juos į išvestį << arba įvestis >>. Mes pažvelgsime į įvestį ir >> vėliau šioje pamokoje.
skaičiuoti << endl;
endl yra manipuliatorius, kuris baigiasi linija (ir pradeda naują). Tai funkcija, kuri taip pat gali būti vadinama tokiu būdu.
endl (cout);
Nors praktiškai to nepadarysi. Jūs naudojate tai taip.
cout << „Some Text“ << endl << endl; // Dvi tuščios eilutės.
Failai yra tiesiog srautai
Reikia atsiminti tai, kad šiomis dienomis daug kuriama GUI programų, kodėl jums reikia teksto įvesties / išvesties funkcijų? Ar tai ne tik konsolė programos? Na, jūs tikriausiai atliksite failų įvestį / išvestį ir galėsite juos ten naudoti, tačiau taip pat paprastai reikia formatuoti tai, kas išvedama į ekraną. Srautai yra labai lankstus įvesties ir išvesties valdymo būdas, su kuriais jie gali dirbti
- Tekstas I / O. Kaip ir konsolių programose.
- Stygos. Patogu formatuoti.
- Bylos įvestis / išvestis.
Manipuliatoriai vėl
Nors mes naudojome ostream klasė, tai yra a išvestinė klasė nuo ios klasė, kilusi iš „ios_base“. Ši protėvių klasė apibūdina visuomenę funkcijos kurie yra manipuliatoriai.
03
nuo 08
„Cout“ manipuliatorių sąrašas
Manipuliatorius galima apibrėžti įvesties arba išvesties srautuose. Tai yra objektai, kurie grąžina nuorodą į objektą ir yra išdėstomi tarp porų <<. Didžioji dalis manipuliatorių yra deklaruoti, bet endl, baigiasi ir praplaukite atvyko is
Čia yra išsamesnis sąrašas.
Iš
- endl - pasibaigia linija ir skambučiai praleidžia.
- baigiasi - įterpia „\ 0“ ( NULL) į srautą.
- praplaukite - priverskite buferį nedelsiant išvesti.
Iš . Dauguma deklaruota 2006 m
- boolalpha - įterpkite arba ištraukite bool objektus kaip „true“ arba „false“.
- noboolalpha - įterpti arba ištraukti bool objektus kaip skaitines reikšmes.
- fiksuotas - įterpti fiksuoto formato slankiojo kablelio reikšmes.
- mokslinis - įterpti slankiojo kablelio reikšmes moksliniu formatu.
- vidinis - vidinis - pateisinti.
- kairė - iš kairės pateisina.
- teisingai - teisingai pagrįsti.
- dec. - įterpti arba ištraukti sveikojo skaičiaus reikšmes dešimtainiu formatu.
- šešioliktainis - įterpti arba ištraukti sveikojo skaičiaus reikšmes šešioliktainiu (16 pagrindų) formatu.
- oct - įterpkite arba ištraukite vertes aštuonkampio (bazinė 8) formatu.
- noshowbase - nefiksuokite reikšmės su jos pagrindu.
- showbase - prefikso reikšmė su jos baze.
- noshowpoint - nerodyti dešimtainio taško, jei to nereikia.
- parodomasis taškas - įterpdami slankiojo kablelio reikšmes visada nurodykite dešimtainį tašką.
- noshowpos - nedėkite pliuso ženklo (+), jei skaičius> = 0.
- vitrinos - Įdėkite pliuso ženklą (+), jei skaičius> = 0.
- noskipws - ištraukite ne praleiskite pradinio baltojo ploto.
- „skipws“ - praleidžiant pradinį baltąjį plotą reikia išgauti.
- didžioji raidė - nepakeiskite mažųjų raidžių atitikmenimis didžiosiomis raidėmis.
- didžioji raidė - pakeiskite mažąsias raides ekvivalentais didžiosiomis raidėmis.
- unitbuf - praplaukite buferį po įdėklo.
- nounitbuf - neplaukite buferio po kiekvienu intarpu.
04
nuo 08
Pavyzdžiai naudojant „Cout“
// ex2_2cpp. #include „stdafx.h“ # įtrauktinaudojant vardų sritį; int pagrindinis (int argc, char * argv []) { plotis (10); cout << dešinė << „Test“ << endl; cout << kairė << "2 testas" << endl; cout << vidinis << "3 testas" << endl; cout << endl; cout.precision (2); cout << 45.678 << endl; cout << didžiosios raidės << „Davidas“ << endl; cout.precision (8); cout << mokslo << endl; cout << 450678762345.123 << endl; cout << fiksuotas << endl; cout << 450678762345.123 << endl; cout << showbase << endl; cout << showpos << endl; cout << hex << endl; cout << 1234 << endl; cout << oct << endl; cout << 1234 << endl; cout << dec << endl; cout << 1234 << endl; cout << noshowbase << endl; cout << noshowpos << endl; cout.unsetf (ios:: didžiosios raidės); cout << hex << endl; cout << 1234 << endl; cout << oct << endl; cout << 1234 << endl; cout << dec << endl; cout << 1234 << endl; grįžti 0; }
Išvestis yra žemiau, aiškumo sumetimais pašalinta viena ar dvi papildomos eilutės.
Testas. 2 testas. 3 testas. 46. Deividas. 4.50678762E + 011. 450678762345.12299000. 0X4D2. 02322. +1234. 4d2. 2322. 1234.
Pastaba: Nepaisant didžiosios raidės, Davidas spausdinamas kaip Davidas, o ne Davidas. Taip yra todėl, kad didžiosios raidės veikia tik generuojamą išvestį, pvz. numeriai atspausdinti šešioliktainis. Taigi šešioliktainė išvestis 4d2 yra 4D2, kai veikia didžioji raidė.
Be to, dauguma šių manipuliatorių iš tikrųjų šiek tiek įsitaiso vėliavoje ir tai galima nustatyti tiesiogiai naudojant
cout.setf ()
ir išvalykite tai
cout.unsetf ()
05
nuo 08
Naudodami „Setf“ ir „Unsetf“, norėdami manipuliuoti I / O formatavimu
Funkcija setf turi du perkrautas žemiau pateiktos versijos. Nors unsetf tiesiog išvalo nurodytus bitus.
setf (vėliavos vertės); setf (vėliavos vertės, kaukių vertės); unsetf (vėliavos vertės);
Kintamos vėliavos yra išvestos iš O ziedas kartu visus norimus bitus su |. Taigi, jei norite mokslinė, didžioji raidė ir boolalfa tada naudok tai. Tik bitai perėjo kaip parametras yra nustatyti. Kiti bitai paliekami nepakeisti.
cout.setf (ios_base:: mokslo | ios_base:: didžiosios raidės | ios_base:: boolalpha); cout << hex << endl; cout << 1234 << endl; cout << dec << endl; cout << 123400003744.98765 << endl; bolio vertė = tiesa; cout << reikšmė << endl; cout.unsetf (ios_base:: boolalpha); cout << reikšmė << endl;
Gamina
4D2. 1,234000E + 011. tiesa. 1.
Maskuojantys bitai
Du parametras „setf“ versija naudoja kaukę. Jei bitas yra nustatytas tiek pirmame, tiek antrame parametruose, tada jis bus nustatytas. Jei bitas yra tik antrame parametre, tada jis išvalomas. Vertybės sureguliuoti lauką, bazinį lauką ir plūduriuojantis laukas (išvardytos žemiau) yra sudėtinės vėliavos, tai yra kelios vėliavos Arba kartu. Dėl bazinis laukas su vertybėmis 0x0e00 yra tas pats kaip gruodis | spalis | šešiakampis. Taigi
setf (ios_base:: hex, ios_basefield);
išvalo visas tris vėliavas, tada nustato šešiakampis. Panašiai sureguliuoti yra liko | teisingai | vidinis ir plūduriuojantis laukas yra mokslinis | fiksuotas.
Bitų sąrašas
Šis sąrašų sąrašas paimtas iš „Microsoft Visual C ++ 6.0“. Tikrosios naudojamos vertės yra savavališkos - kitas sudarytojas gali naudoti skirtingas vertes.
„skipws“ = 0x0001. unitbuf = 0x0002. didžioji raidė = 0x0004. „showbase“ = 0x0008. parodomasis taškas = 0x0010. parodų stendai = 0x0020. kairė = 0x0040. dešinė = 0x0080. vidinis = 0x0100. gruodis = 0x0200. okt = 0x0400. hex = 0x0800. mokslo = 0x1000. fiksuotas = 0x2000. boolalpha = 0x4000. sureguliuoti lauką = 0x01c0. bazinis laukas = 0x0e00, plūdės laukas = 0x3000. _Fmtmask = 0x7fff, _Fmtzero = 0.
06
nuo 08
Apie „Clog“ ir „Cerr“
Kaip cout, užsikimšti ir Cerr yra iš anksto apibrėžti objektai, apibrėžti sraute. „Iostream“ klasė paveldima iš abiejų ostream ir istream taigi, kodėl cout pavyzdžiai gali naudoti „iostream“.
Buferiniai ir nemurtiniai
- Buferinis - visa išvestis laikinai saugoma buferis ir tada numetamas į ekraną vienu ypu. Tiek puta, tiek užsikimšimas yra buferiai.
- Neapsaugotas - visa išvestis iškart perduodama į išvesties įrenginį. Neapsaugoto objekto pavyzdys yra cerras.
Žemiau pateiktas pavyzdys parodo, kad cerr yra naudojamas taip pat kaip ir pelynas.
# įtraukti naudojant vardų sritį; int _tmain (int argc, _TCHAR * argv []) {gimdos plotis (15); cerr.teisė; cerr << "Klaida" << endl; grįžti 0; }
Pagrindinė buferizacijos problema yra, jei programa avarijos, tada buferio turinys prarandamas ir sunkiau suprasti, kodėl jis sudužo. Nebuferuotas išėjimas yra tuojau pat, todėl gali būti naudinga pabarstyti keletą eilučių per šį kodą.
cerr << "Pavojingos funkcijos įvedimas zappit" << endl;
Registravimo problema
Programos įvykių žurnalo sudarymas gali būti naudingas būdas pastebėti sudėtingas klaidas, kurių tipai pasitaiko tik dabar. Jei įvykis yra avarija, turite problemą - ar po kiekvieno skambučio turite išplauti žurnalą į diską, kad galėtumėte pamatyti įvykius iki pat avarijos arba laikykite jį buferyje ir periodiškai praplaukite buferį ir tikiuosi, kad per avariją neprarasite per daug atsiranda?
07
nuo 08
Cin naudojimas įvestims: suformatuota įvestis
Yra du įvesties tipai.
- Formatuota. Įvesties skaitymas kaip skaičiai ar tam tikro tipo.
- Neformatuotas. Skaitymo baitai arba stygos. Tai suteikia daug didesnę įvesties srauto kontrolę.
Čia yra paprastas suformatuoto įvesties pavyzdys.
// excin_1.cpp: nurodo konsolės programos įėjimo tašką. #include „stdafx.h“ // Tik „Microsoft“. # įtraukti naudojant vardų sritį; int pagrindinis (int argc, char * argv []) { int a = 0; plūdės b = 0,0; int c = 0; cout << "Prašome įvesti int, plūdę ir int atskirtus tarpais" <> a >> b >> c; cout << "Jūs įvedėte" << a << "" << b << "" << c << endl; grįžti 0; }
Cin naudoja tris skaičius (tarpt, plūdė, int) atskirtos tarpais. Įrašę numerį turite paspausti „Enter“.
3 7.2 3 pasirodys „Jūs įvedėte 3 7.2 3“.
Formatuota įvestis turi apribojimus!
Jei įvesite 3,76 5 8, gausite „Įvedėte 3 0,76 5“, visos kitos tos eilutės reikšmės bus prarastos. Tai elgiasi teisingai, kaip. nėra int dalis ir taip žymi plūdės pradžią.
Klaida įstrigusi
Cin objektas nustato klaidos bitą, jei įvestis nebuvo sėkmingai konvertuota. Ši dalis yra dalis ios ir gali būti perskaitytas naudojantis nepavykti () funkcija abiem cinas ir cout kaip šitas.
if (cin.fail ()) // daryk ką nors.
Nenuostabu, cout.fail () yra retai nustatomas, bent jau ekrano išvestyje. Vėlesnėje pamokoje apie failų I / O matysime kaip cout.fail () gali tapti tiesa. Taip pat yra Gerai() funkcija cinas, cout tt