C ++ õpetus: saate teada sisendi ja väljundi kohta

click fraud protection

01

alates 08

Uus viis väljundini

Programmi kood
traffic_analyzer / Getty Images

C ++ säilitab C-ga väga kõrge tagasiühilduvuse, seega saab lisada, et saaksite juurdepääsu veebisaidile printf () funktsioon väljundiks. Kuid C ++ pakutav sisend / väljund on märkimisväärselt võimsam ja mis veelgi olulisem - tüüpi ohutu. Saate siiski ka kasutada scanf () sisendiks, kuid tüüpi turvafunktsioonid, mida C ++ pakub, tähendab, et teie rakendused on C ++ kasutamisel kindlamad.

Eelmises õppetunnis puudutati seda näitega, mis kasutas cout. Siin käsitleme natuke põhjalikumalt, alustades kõigepealt väljundist, kuna seda kiputakse rohkem kasutama kui sisendit.

Iostreami klass pakub juurdepääsu objektidele ja meetoditele, mida vajate nii väljundi kui ka sisendi jaoks. Mõelge i / o baitide voogude osas - kas rakendusest faili, ekraanile või printerisse - see on väljund või klaviatuurilt - see on sisend.

Väljund Cout-iga

Kui teate C-d, võite seda teada << kasutatakse bittide nihutamiseks vasakule. Nt 3 << 3 on 24. Nt vasakpoolne nihe kahekordistab väärtust, nii et 3 vasakpoolset nihet korrutab selle 8-ga.

instagram viewer

C ++, << on olnud ülekoormatud ostreami klassis nii, et int, hõljuma, ja keelte tüübid (ja nende variandid, nt kahekordistub) on kõik toetatud. Nii saate teksti väljundit, sidudes mitu üksust vahemikku <<.>


cout << "Mõni tekst" << väärtus << floatdouble << endl; 

See omapärane süntaks on võimalik, kuna kõik << on tegelikult funktsioonikõne, mis tagastab a viide otsevoolu objekt. Nii et ülaltoodud joon on tegelikult selline


cout. << ("mingi tekst"). cout. << (väärtus) .cout. << (floatdouble) .cout. << (endl); 

C funktsiooniprintf suutis vormindada väljundi, kasutades vorminguspetsifikaate, näiteks% d. C ++ puhul saab cout ka väljundit vormindada, kuid kasutab selleks erinevat viisi.

02

alates 08

Couti kasutamine väljundi vormindamiseks

Objekt cout on liige iostream raamatukogu. Pidage meeles, et see tuleb lisada a-ga


# kaasata 

See raamatukogu iostream on tuletatud ostream (väljundi jaoks) ja istream sisendiks.

Vormindamine Teksti väljund toimub manipulaatorite sisestamisel väljundvoogu.

Mis on manipulaator?

See on funktsioon, mis võib muuta väljundi (ja sisendi) voo omadusi. Eelmisel lehel nägime seda << oli ülekoormatud funktsioon, mis tagastati viide kutsuvale objektile nt. cout väljundi jaoks või cin sisendi jaoks. Kõik manipulaatorid teevad seda, nii et saate need väljundisse lisada << või sisend >>. Vaatame sisendit ja >> hiljem selles õppetükis.


loendama << endl; 

endl on manipulaator, mis lõpetab rea (ja alustab uut). See on funktsioon, mida saab ka sel viisil nimetada.


endl (cout); 

Kuigi praktikas sa seda ei teeks. Sa kasutad seda niimoodi.


cout << "Mõni tekst" << endl << endl; // Kaks tühja rida. 

Failid on lihtsalt voogesitused

Midagi, mida meeles pidada, et tänapäeval tehakse palju arengut GUI miks teil oleks vaja teksti I / O funktsioone? Kas see pole mitte ainult konsool rakendused? Noh, tõenäoliselt teete faili I / O ja saate neid ka seal kasutada, aga ka see, mida ekraanile väljund vajab, vajab tavaliselt ka vormindamist. Vood on sisendi ja väljundi käsitlemiseks väga paindlik viis, millega saab töötada

  • Tekst I / O. Nagu konsoolirakendustes.
  • Keeled. Käepärane vormindamine.
  • Faili I / O.

Manipulaatorid jälle

Kuigi oleme kasutanud ostream klass, see on a tuletatud klass alates ios klass, mis tuleneb ios_baas. See esivanemate klass määratleb üldsuse funktsioonid mis on manipulaatorid.

03

alates 08

Cout-manipulaatorite loetelu

Manipulaatoreid saab määratleda sisend- või väljundvoogudes. Need on objektid, mis annavad viite objektile ja on paigutatud paaride vahele <<. Enamik manipulaatoreid kuulutatakse sisse, aga endl, lõpeb ja loputada pärit . Mitu manipulaatorit võtab ühe parameetri ja need pärinevad .

Siin on täpsem loetelu.

Alates

  • endl - lõpetab liini ja kutsub taset.
  • lõpeb - ​​lisab '\ 0' ( NULL) voogu.
  • flush - puhver tuleb kohe välja anda.

Alates . Enamik deklareeritakse esivanem . Olen nad rühmitanud funktsioonide, mitte tähestiku järgi.

  • boolalpha - sisestage või eraldage booliobjektid kui "tõene" või "vale".
  • noboolalpha - booliobjektide sisestamine või ekstraheerimine arvväärtustena.
  • fikseeritud - sisestage fikseeritud vormingus ujukoma väärtused.
  • teaduslik - lisada ujuva täpsusega väärtused teaduslikku formaati.
  • sisemine - sisemine - õigustama.
  • vasak - õigusta vasakule.
  • õige - parem-õigusta.
  • detsember - täisarvu sisestamine või eraldamine kümnendvormingus.
  • hex - täisarvu sisestamine või eraldamine kuueteistkümnendsüsteemis (alus 16).
  • okt - sisestage või ekstraheerige väärtused kaheksas (alus 8) vormingus.
  • noshowbase - ärge lisage väärtust selle aluse ees.
  • showbase - prefiksi väärtus koos alusega.
  • noshowpoint - kui see pole vajalik, ärge näidake koma.
  • showpoint - ujukoma väärtuste sisestamisel näidake alati koma.
  • noshowpos - ärge lisage plussmärki (+), kui arv> = 0.
  • showpospos - sisestage plussmärk (+), kui arv> = 0.
  • noskipws - ärge jätke ekstraheerimisel esialgset vaba ruumi vahele.
  • skipws - kaevandamisel jäta algne tühik vahele.
  • suurtäht - ärge asendage väiketähti suurtähtedega.
  • suurtäht - asendage väiketähed suurtähtedega.
  • unitbuf - loputa puhver pärast inserti.
  • nounitbuf - ärge loputage puhver pärast iga sisestamist.

04

alates 08

Couti kasutamise näited

// ex2_2cpp. #include "stdafx.h" # kaasatanimeruumi std kasutamine; int peamine (int argc, char * argv []) { laius (10); cout << parem << "Test" << endl; cout << vasak << "Test 2" << endl; cout << sisemine << "Test 3" << endl; cout << endl; cout.precision (2); cout << 45.678 << endl; cout << suurtähed << "David" << endl; cout.precision (8); cout << teaduslik << endl; cout << 450678762345.123 << endl; cout << fikseeritud << endl; cout << 450678762345.123 << endl; cout << showbase << endl; cout << showpos << endl; cout << heks << endl; cout << 1234 << endl; cout << okt << endl; cout << 1234 << endl; cout << detsember << endl; cout << 1234 << endl; cout << noshowbase << endl; cout << noshowpos << endl; cout.unsetf (ios:: suurtähed); cout << heks << endl; cout << 1234 << endl; cout << okt << endl; cout << 1234 << endl; cout << detsember << endl; cout << 1234 << endl; tagasi 0; }

Selle väljund on allpool, selguse huvides eemaldatakse üks või kaks lisarea tühikut.

 Test. 2. test. 3. test. 46. David. 4,50678762E + 011. 450678762345.12299000. 0X4D2. 02322. +1234. 4d2. 2322. 1234. 

Märge: Vaatamata suurtähtedele on David trükitud kui David ja mitte DAVID. Seda seetõttu, et suurtähed mõjutavad ainult loodud väljundit - nt. numbrid trükitud kuueteistkümnendsüsteemis. Seega, kui suurtäht töötab, on heksaväljund 4d2 4D2.

Enamik neist manipulaatoritest seab lipu natuke sisse ja seda on võimalik otse seadistada

 cout.setf () 

ja tühjendage see

 cout.unsetf () 

05

alates 08

Setfi ja Unsetfi kasutamine I / O vormindamise manipuleerimiseks

Funktsioon setf on kaks ülekoormatud allpool näidatud versioonid. Kuigi unsetf lihtsalt puhastab täpsustatud bitid.

 setf (lipuväärtused); setf (lipuväärtused, maskiväärtused); unsetf (lipuväärtused); 

Muutuv lipud tuletatakse valemiga VÕTMINE koos kõigi soovitud bittidega |. Nii et kui soovite teaduslikud, suurtähed ja boolalfa siis kasuta seda. Ainult bitid läksid sisse parameeter on seatud. Muud bitid jäetakse muutmata.

 cout.setf (ios_base: teaduslik | ios_base:: suurtäht | ios_base:: boolalpha); cout << heks << endl; cout << 1234 << endl; cout << detsember << endl; cout << 123400003744.98765 << endl; lolli väärtus = tõene; cout << väärtus << endl; cout.unsetf (ios_base:: boolalpha); cout << väärtus << endl; 

Toodab

 4D2. 1,234000E + 011. tõsi. 1. 

Maskeerivad bitid

Kaks parameeter setfi versioon kasutab maski. Kui bit on seatud nii esimeses kui ka teises parameetris, siis see seadistatakse. Kui bit on ainult teises parameetris, siis see tühjendatakse. Väärtused kohandamisväli, alusväli ja ujukiväli (loetletud allpool) on liitlipud, see tähendab mitu lippu Või tahaks koos. Sest baasväli väärtustega 0x0e00 on sama nagu detsember | oktoober | heks. Nii

 setf (ios_baas:: heks, ios_basefield); 

kustutab kõik kolm lippu ja seab siis paika heks. Samamoodi kohandamisväli on vasakule | õige | sisemine ja ujukiväli on teaduslik | fikseeritud.

Bittide loetelu

See loendite loetelu on võetud kataloogist Microsoft Visual C ++ 6.0. Tegelikud väärtused on suvalised - mõni teine ​​kompilaator võib kasutada erinevaid väärtusi.

 skipws = 0x0001. unitbuf = 0x0002. suurtähed = 0x0004. showbaas = 0x0008. näitusepunkt = 0x0010. showpos = 0x0020. vasak = 0x0040. paremal = 0x0080. sisemine = 0x0100. dets = 0x0200. okt = 0x0400. heks = 0x0800. teaduslik = 0x1000. fikseeritud = 0x2000. boolalpha = 0x4000. kohandamisväli = 0x01c0. baasväli = 0x0e00, ujukiväli = 0x3000. _Fmtmask = 0x7fff, _Fmtzero = 0. 

06

alates 08

Clogist ja Cerrist

Nagu cout, ummistada ja cerr on eelnevalt määratletud objektid, mis on määratletud voos. Iostreami klass pärib mõlemalt ostream ja istream sellepärast cout näiteid saab kasutada iostream.

Puhverdatud ja puhverdamata

  • Puhverdatud - kogu väljund salvestatakse ajutiselt a puhver ja siis suunati korraga ekraanile. Puhverdatud on nii varikatust kui ka ummistust.
  • Puhverdamata - kogu väljund läheb kohe väljundseadmesse. Puhverdamata objekti näiteks on cerr.

Allpool toodud näide näitab, et tserri kasutatakse samamoodi nagu mündi.


# kaasata nimeruumi std kasutamine; int _tmain (int argc, _TCHAR * argv []) {tsirrilaius (15); cerr.õigus; cerr << "Viga" << endl; tagasi 0; }

Puhverdamise peamine probleem on see, kui programmi jookseb kokku, siis kaob puhvri sisu ja on raskem aru saada, miks see kukkus. Puhverdamata väljund on kohene, nii et mõne sellise rea piserdamine koodi kaudu võib osutuda kasulikuks.

 cerr << "Ohtliku funktsiooni sisestamine zappit" << endl; 

Logimisprobleem

Programmisündmuste logi koostamine võib olla kasulik viis raskete vigade leidmiseks - seda tüüpi, mis ilmnevad alles nüüd ja siis. Kui see sündmus on siiski krahh, on teil probleem - kas loputate logi kettale pärast iga kõnet, et saaksite sündmusi näha kuni krahhini või hoidke seda puhvris ja loputage seda perioodiliselt ja loodan, et te ei kaota krahhi ajal liiga palju toimub?

07

alates 08

Cini kasutamine sisendiks: vormindatud sisend

On kahte tüüpi sisendit.

  • Vormindatud Sisendi lugemine numbrite või teatud tüüpi kujul.
  • Vormindamata. Lugemise baitides või keelpillid. See annab sisendvoo üle palju suurema kontrolli.

Siin on lihtne näide vormindatud sisestusest.

 // excin_1.cpp: määratleb konsoolirakenduse sisenemispunkti. # sisaldab "stdafx.h" // ainult Microsoft. # kaasata nimeruumi std kasutamine; int peamine (int argc, char * argv []) { int a = 0; ujuk b = 0,0; int c = 0; cout << "Palun sisestage int, ujuk ja int tühikutega eraldatud" <> a >> b >> c; cout << "Sisestasite" << a << "" << b << "" << c << endl; tagasi 0; }

Kolme numbri lugemiseks kasutatakse cini (int, hõljuma, int) eraldatud tühikutega. Pärast numbri sisestamist peate vajutama sisestusklahvi.

3 7.2 3 väljastab "Sisestasite 3 7.2 3".

Vormindatud sisendil on piirangud!

Kui sisestate 3,76 5 8, kuvatakse väärtus "Sisestasite 3 0,76 5", kaovad kõik selle rea muud väärtused. See käitub õigesti, nagu ka. ei kuulu int-i ja tähistab seega ujuki algust.

Viga püünises

Kui sisendit ei õnnestunud teisendada, seob Cin-objekt ebaõnnestumisbiti. See bit on osa ios ja seda saab lugeda nurju () funktsioon mõlemal cin ja cout nagu nii.

 if (cin.fail ()) // tee midagi. 

Pole üllatav, cout.fail () on harva seatud, vähemalt ekraaniväljundis. Hilisemas õppetükis faili I / O kohta näeme kuidas cout.fail () võib tõeks saada. Samuti on olemas a hea () funktsioon cin, cout jne.

instagram story viewer