logo

C++ pagrindinė įvestis ir išvestis (I/O)

C++ I/O operacija naudoja srauto koncepciją. Baitų serija arba duomenų srautas vadinamas srautu. Tai pagreitina našumą.

Jei baitai perkeliami iš pagrindinės atminties į įrenginį, pvz., spausdintuvą, ekraną, tinklo ryšį ir pan., tai vadinama išvesties operacija.

Įvesties operacija įvyksta, kai baitai teka iš įrenginio, pvz., spausdintuvo, ekrano arba tinklo ryšio, į pagrindinę atmintį.

C++ kalboje, iš anksto nustatytas funkcijas ir deklaracijos pateikiamos per antraščių failus, leidžiančius atlikti konkrečias užduotis, nereikia rašyti naujo kodo nuo pat pradžių. Keletas svarbių C++ įvesties / išvesties operacijų antraščių failų apima funkcijas, skirtas efektyviai atlikti įvesties ir išvesties užduotis. C++ standartinėje bibliotekoje, C++ programavimo kalba sukurtų klasių ir metodų rinkinyje, yra šie antraštės failai. Aptarkime pagrindinius įvesties / išvesties operacijų antraščių failus:

Antraštės failas Funkcija ir aprašymas
Jis naudojamas apibrėžti cout, cin ir cerr objektus, kurie atitinkamai atitinka standartinį išvesties srautą, standartinį įvesties srautą ir standartinį klaidų srautą.
Jis naudojamas paskelbti paslaugoms, naudingoms atlikti suformatuotą I/O, pvz setprecision ir setw.
Jis naudojamas deklaruoti paslaugas, skirtas vartotojo valdomam failų apdorojimui.

iostream: Tai vienas iš svarbiausių C++ įvesties/išvesties operacijų antraštės failų. Tai reiškia 'įvesties išvesties' srautas. Norėdami dirbti su įvairių formų įvesties / išvesties srautais, iostream antraštės faile yra klasės istream (įvesties srautas) ir ostream (išvesties srautas) taip pat jo išvestinės klasės ifstream, offstream , ir styginių srautas . Šios antraštės failo dažniausiai naudojamos klasės yra cin (standartinė įvestis) ir cout (standartinė išvestis) , kurie leidžia skaityti vartotojo įvestį ir rodyti išvestį į konsolę. Pavyzdžiui:

 #include using namespace std; int main() { int num; cout <> num; cout << 'You entered: ' << num << endl; return 0; } 

Išvestis

 Enter a number: 42 You entered: 42 

iomanipas: Šis antraštės failas reiškia „įvesties-išvesties manipuliavimas“ . Jame pateikiami formatavimo įrankiai įvestis ir išvestis . Tai leidžia modifikuoti lygiavimas, plotis, tikslumas ir kitas įvesties ir išvesties formatavimo funkcijas. Setw, setprecision, fiksuotas, kairėn, dešinėn , ir kitos reguliariai naudojamos funkcijos yra išvardytos toliau. Tai ypač patogu pateikiant duomenis tam tikru būdu.

Pavyzdys:

 #include #include using namespace std; int main() { double pi = 3.14159; cout << fixed << setprecision(2) << 'Value of pi: ' << pi << endl; return 0; } 

Išvestis

formatuoti datą Java
 Value of pi: 3.14 

srautas: Iškviečiamas failo įvesties/išvesties operacijų antraštės failas fstream . Jį sudaro skaitymo iš failų ir rašymo į failus klases ifstream (įvesties failo srautas) ir ofstream (išvesties failo srautas) . Sistema naudoja šias klases, kad atidarytų tik skaitomus ir tik rašomus failus.

Pavyzdys:

 #include #include using namespace std; int main() { ofstream outputFile('output.txt'); if (outputFile.is_open()) { outputFile << 'Hello, File I/O!'; outputFile.close(); cout << 'File is written successfully.' << endl; } else { cout << 'Failed to open the file.' << endl; } return 0; } 

Išvestis

 The file was written successfully. 

Šie antraštės failai yra vieni svarbiausių atliekant C++ įvesties/išvesties užduotis. Kiekvienas iš jų turi konkretų tikslą ir siūlo įrankius, reikalingus sėkmingai valdyti užduotis, susijusias su įvestimi ir išvestimi, nesvarbu, ar ji sąveikauja su konsolė, formatavimo išvestis arba dirbti su failais.

C++ kalboje mes dažnai naudojame 'naudojant vardų erdvę std;' po antraštės failais. The vardų erdvė std; pareiškimas dažnai naudojamas C++, kad būtų supaprastintas kodas dirbant su standartiniais bibliotekos komponentais. Išsamiau panagrinėkime šio teiginio funkciją ir taikymą:

A vardų erdvė yra panašių identifikatorių (pvz., klasės, funkcijos , ir kintamieji ), kad išvengtumėte pavadinimų konfliktų. C++ standartinė biblioteka pateikia savo dalis (pvz., cin, cout ir kt.) std vardų erdvėje.

Terminas 'standartas' yra sutrumpintas iki 'std' , ir joje yra visi standartinės bibliotekos elementai. Tai darant sumažinami vardų konfliktai su jūsų kode nustatytais identifikatoriais.

Dabar pakalbėkime apie tai, kodėl naudojama vardų erdvė std; naudojamas teiginys:

Nenaudojant vardų erdvės std:

 #include int main() { std::cout << 'Hello, world!' << std::endl; return 0; } With using namespace std: #include using namespace std; int main() { cout << 'Hello, world!' << endl; return 0; } 

Kaip matote, naudojant vardų erdvė std; teiginys leidžia praleisti std:: priešdėlis kai pasiekiate standartinius bibliotekos komponentus. Dėl to kodas trumpesnis ir lengviau skaitomas, nes jums nereikia kartoti std:: prieš kiekvieną standartinį bibliotekos identifikatorių.

I/O bibliotekos antraštės failai

Standartinis išvesties srautas (cout):

Cout objektas yra ostream klasės iš anksto nustatytas objektas. Jis prijungtas prie standartinio išvesties įrenginio, kuris paprastai yra ekranas. Cout naudojamas kartu su srauto įterpimo operatoriumi (<<) to show the output on a console< p>

Pažiūrėkime paprastą standartinio išvesties srauto (cout) pavyzdį:

 #include using namespace std; int main( ) { char ary[] = &apos;Welcome to C++ tutorial&apos;; cout &lt;&lt; &apos;Value of ary is: &apos; &lt;&lt; ary &lt;&lt; endl; } 

Išvestis

 Value of ary is: Welcome to C++ tutorial 

Standartinis įvesties srautas (cin)

The valgymas yra iš anksto nustatytas objektas srautas klasė. Jis yra prijungtas prie standartinio įvesties įrenginio, kuris paprastai yra klaviatūra. Cin naudojamas kartu su srauto ištraukimo operatoriumi (>>), kad būtų galima nuskaityti įvestį iš konsolės.

Pažiūrėkime paprastą standartinio įvesties srauto (cin) pavyzdį:

 #include using namespace std; int main( ) { int age; cout &lt;&gt; age; cout &lt;&lt; &apos;Your age is: &apos; &lt;&lt; age &lt;&lt; endl; } 

Išvestis

 Enter your age: 22 Your age is: 22 

Standartinė pabaigos eilutė (endl)

The endl yra iš anksto nustatytas objektas mūsų priešas klasė. Jis naudojamas naujiems eilutės simboliams įterpti ir srautui išplauti.

Pažiūrėkime paprastą standartinės pabaigos eilutės (endl) pavyzdį:

 #include using namespace std; int main( ) { cout &lt;&lt; &apos;C++ Tutorial&apos;; cout &lt;&lt; &apos; Javatpoint&apos;&lt;<endl; cout << 'end of line'<<endl; } < pre> <p> <strong>Output</strong> </p> <pre> C++ Tutorial Javatpoint End of line </pre> <h3>Un-buffered standard error stream (cerr):</h3> <p> <strong> <em>cerr</em> </strong> stands for <strong> <em>&apos;standard error&apos;</em> .</strong> </p> <p>It is an unbuffered stream, meaning that output sent to <strong> <em>cerr</em> </strong> is immediately displayed on the console without buffering.</p> <p>It is typically used for displaying error messages and diagnostic information, which need to be displayed immediately to avoid delays caused by buffering.</p> <p> <strong>Example: using cerr:</strong> </p> <pre> #include int main() { std::cerr &lt;&lt; &apos;This is an error message.&apos; &lt;&lt; std::endl; return 0; } </pre> <p> <strong>Output</strong> </p> <pre> This is an error message. </pre> <h3>buffered standard error stream (clog):</h3> <p>clog stands for <strong> <em>&apos;standard log&apos;</em> </strong> . It is a buffered stream, similar to cout. It&apos;s often used for writing informational or diagnostic messages that are less time-sensitive than errors. The use of buffering can improve performance when displaying a large number of messages.</p> <p> <strong>Example: using clog</strong> </p> <pre> #include int main() { std::clog &lt;&lt; &apos;This is an informational message.&apos; &lt;&lt; std::endl; return 0; } </pre> <p> <strong>Output</strong> </p> <pre> This is an informational message. </pre> <p>In both examples, the output will appear on the console. However, the main difference between <strong> <em>cerr</em> </strong> and <strong> <em>clog</em> </strong> lies in their buffering behavior. Due to its unbuffered nature, messages given to <strong> <em>cerr</em> </strong> are displayed right away, but messages sent to clog may be buffered for greater speed. However, they will still eventually appear on the console.</p> <h4>Note: It is important to remember that the type of message you wish to display will determine whether you use cerr or clog. Use cerr for essential messages that need immediate attention (like error messages) and use clog for less critical diagnostic or informational messages that can be buffered for better performance.</h4> <hr></endl;>

Nebuferinis standartinis klaidų srautas (cerr):

cerr reiškia 'Standartinė klaida' .

Tai nebuferinis srautas, o tai reiškia, kad išvestis siunčiama į cerr iš karto rodomas konsolėje be buferio.

Paprastai jis naudojamas klaidų pranešimams ir diagnostinei informacijai rodyti, kuri turi būti rodoma nedelsiant, kad būtų išvengta vėlavimų dėl buferio.

Pavyzdys: naudojant cerr:

 #include int main() { std::cerr &lt;&lt; &apos;This is an error message.&apos; &lt;&lt; std::endl; return 0; } 

Išvestis

 This is an error message. 

buferinis standartinis klaidų srautas (užsikimšimas):

užsikimšimas reiškia 'standartinis žurnalas' . Tai buferinis srautas, panašus į cout. Jis dažnai naudojamas rašant informacinius ar diagnostinius pranešimus, kurie yra mažiau jautrūs laikui nei klaidos. Buferio naudojimas gali pagerinti našumą, kai rodomas didelis pranešimų skaičius.

Pavyzdys: naudojant kamštį

 #include int main() { std::clog &lt;&lt; &apos;This is an informational message.&apos; &lt;&lt; std::endl; return 0; } 

Išvestis

 This is an informational message. 

Abiejuose pavyzdžiuose išvestis bus rodoma konsolėje. Tačiau pagrindinis skirtumas tarp cerr ir užkimšti slypi jų buferiniame elgesyje. Dėl savo nebuferinio pobūdžio pranešimai teikiami cerr rodomi iš karto, tačiau pranešimai, siunčiami į užsikimšimą, gali būti saugomi buferyje, kad būtų padidintas greitis. Tačiau galiausiai jie vis tiek pasirodys konsolėje.

Pastaba: svarbu atsiminti, kad nuo pranešimo tipo, kurį norite rodyti, priklausys, ar naudosite cerr, ar užsikimšę. Naudokite cerr esminiams pranešimams, į kuriuos reikia nedelsiant atkreipti dėmesį (pvz., klaidų pranešimams), ir naudokite užkimšimą, jei norite gauti ne tokius svarbius diagnostikos ar informacinius pranešimus, kurie gali būti saugomi buferyje, kad būtų geresnis veikimas.