„C ++“ mokymo programa: sužinokite apie įvestį ir išvestį

click fraud protection

01

nuo 08

Naujas išeities būdas

Programos kodas
„traffic_analyzer“ / „Getty Images“

C ++ išlaiko labai aukštą atgalinį suderinamumą su C, taigi gali būti įtrauktas, kad suteiktumėte prieigą prie printf () išėjimo funkcija. Tačiau C ++ teikiama I / O yra žymiai galingesnė ir, svarbiausia, tipo saugu. Jūs vis tiek galite naudoti „scanf“ () Jei norite naudoti įvestį, tačiau saugos priemonės, kurias teikia „C ++“, reiškia, kad jūsų programos bus tvirtesnės, jei naudosite „C ++“.

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.

instagram viewer

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 . Keletas manipuliatorių paima vieną parametrą, o jie gaunami .

Čia yra išsamesnis sąrašas.

  • endl - pasibaigia linija ir skambučiai praleidžia.
  • baigiasi - įterpia „\ 0“ ( NULL) į srautą.
  • praplaukite - priverskite buferį nedelsiant išvesti.

. Dauguma deklaruota 2006 m protėvis . Aš juos suskirstiau pagal funkcijas, o ne pagal abėcėlę.

  • 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

instagram story viewer