logo

C++ pamata ievade un izvade (I/O)

C++ I/O darbība izmanto straumes koncepciju. Baitu sērija vai datu plūsma tiek saukta par straumi. Tas paātrina veiktspēju.

Ja baiti tiek pārsūtīti no galvenās atmiņas uz ierīci, piemēram, printeri, displeju, tīkla savienojumu utt., to sauc par izvades darbību.

Ievades darbība notiek, ja baiti plūst no ierīces, piemēram, printera, displeja ekrāna vai tīkla savienojuma uz galveno atmiņu.

C++ valodā, iepriekš noteiktas funkcijas un deklarācijas tiek nodrošinātas, izmantojot galvenes failus, ļaujot veikt konkrētus uzdevumus, nerakstot jaunu kodu no paša sākuma. Daži svarīgi ievades/izvades operāciju galveņu faili C++ ietver funkcijas efektīvai ievades un izvades uzdevumu veikšanai. C++ standarta bibliotēka, klašu un metožu kolekcija, kas izveidota C++ programmēšanas valodā, satur šos galvenes failus. Apspriedīsim galvenos ievades/izvades operāciju galvenes failus:

Galvenes fails Funkcija un apraksts
To izmanto, lai definētu cout, cin un cerr objekti, kas atbilst attiecīgi standarta izvades straumei, standarta ievades straumei un standarta kļūdu straumei.
To izmanto, lai deklarētu pakalpojumus, kas ir noderīgi formatēta ievades/izvades veikšanai, piemēram, setprecision and setw.
To izmanto, lai deklarētu pakalpojumus lietotāja kontrolētai failu apstrādei.

iostream: Tas ir viens no svarīgākajiem C++ ievades/izvades operāciju galvenes failiem. Tas nozīmē 'ieejas izejas' straume. Lai strādātu ar dažāda veida ievades/izvades plūsmām, iostream galvenes failā ir iekļautas klases istream (ievades straume) un ostream (izvades straume) kā arī tās atvasinātās klases ifstream, offstream , un stringstream . Šajā galvenes failā visbiežāk izmantotās klases ir cin (standarta ievade) un cout (standarta izvade) , kas ļauj nolasīt lietotāja ievadi un parādīt izvadi konsolē. Piemēram:

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

Izvade

 Enter a number: 42 You entered: 42 

iomanip: Šis galvenes fails apzīmē 'ievades-izejas manipulācijas' . Tas nodrošina formatēšanas rīkus ievade un izvade . Tas ļauj jums modificēt izlīdzināšana, platums, precizitāte un citas ievades un izvades formatēšanas funkcijas. Setw, setprecision, fiksēts, pa kreisi, pa labi , un citas regulāri izmantotās funkcijas ir uzskaitītas zemāk. Tas ir īpaši ērts datu prezentēšanai noteiktā veidā.

Piemērs:

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

Izvade

metodes java
 Value of pi: 3.14 

straume: Tiek izsaukts galvenes fails faila ievades/izvades operācijām fstream . Tas ietver nodarbības lasīšanai no failiem un rakstīšanai tajos ifstream (ievades faila straume) un ofstream (izejas faila straume) . Sistēma izmanto šīs klases, lai atvērtu tikai lasāmus un tikai rakstāmus failus.

Piemērs:

 #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; } 

Izvade

 The file was written successfully. 

Šie galvenes faili ir vieni no vissvarīgākajiem C++ ievades/izvades uzdevumiem. Katram no tiem ir īpašs mērķis un tiek piedāvāti rīki, kas nepieciešami, lai veiksmīgi pārvaldītu uzdevumus, kas saistīti ar ievadi un izvadi neatkarīgi no tā, vai tas mijiedarbojas ar konsole, formatēšanas izvade vai strādājot ar failiem.

C++ valodā mēs bieži lietojam 'izmantojot namespace std;' pēc galvenes failiem. The namespace std; paziņojums bieži tiek izmantots C++, lai racionalizētu kodu, strādājot ar standarta bibliotēkas komponentiem. Apskatīsim šī paziņojuma funkciju un pielietojumu sīkāk:

A nosaukumvieta ir paņēmiens līdzīgu identifikatoru grupēšanai (piemēram, klases, funkcijas , un mainīgie ), lai novērstu nosaukumu konfliktus. C++ standarta bibliotēka nodrošina savas daļas (piemēram, cin, cout utt.) std nosaukumvietā.

Termiņš 'standarta' ir saīsināts uz 'std' , un tajā ir ietverti visi standarta bibliotēkas elementi. Šādi rīkojoties, tiek samazināti nosaukumu konflikti ar kodā iestatītajiem identifikatoriem.

Tagad parunāsim par to, kāpēc tiek izmantota namespace std; tiek izmantots paziņojums:

Neizmantojot namespace 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; } 

Kā redzat, izmantojot namespace std; paziņojums ļauj izlaist std:: prefikss piekļūstot standarta bibliotēkas komponentiem. Tas padara jūsu kodu īsāku un lasāmāku, jo jums tas nav jāatkārto std:: pirms katra standarta bibliotēkas identifikatora.

I/O bibliotēkas galvenes faili

Standarta izvades straume (cout):

Cout objekts ir ostream klases iepriekš definēts objekts. Tas ir savienots ar standarta izvades ierīci, kas parasti ir displeja ekrāns. Cout tiek izmantots kopā ar straumes ievietošanas operatoru (<<) to show the output on a console< p>

Apskatīsim vienkāršu standarta izvades straumes (cout) piemēru:

 #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; } 

Izvade

 Value of ary is: Welcome to C++ tutorial 

Standarta ievades straume (cin)

The ēšana ir iepriekš definēts objekts straume klasē. Tas ir savienots ar standarta ievades ierīci, kas parasti ir tastatūra. Cin tiek izmantots kopā ar straumes ekstrakcijas operatoru (>>), lai nolasītu ievadi no konsoles.

Apskatīsim vienkāršu standarta ievades straumes (cin) piemēru:

 #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; } 

Izvade

 Enter your age: 22 Your age is: 22 

Standarta beigu līnija (endl)

The endl ir iepriekš definēts objekts mūsu ienaidnieks klasē. To izmanto, lai ievietotu jaunas rindas rakstzīmes un izskalotu straumi.

Apskatīsim vienkāršu standarta beigu līnijas (endl) piemēru:

 #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;>

Nebuferēta standarta kļūdu straume (cerr):

cerr apzīmē 'standarta kļūda' .

Tā ir nebuferēta straume, kas nozīmē, ka izvade tiek nosūtīta uz cerr tiek nekavējoties parādīts konsolē bez buferizācijas.

To parasti izmanto, lai parādītu kļūdu ziņojumus un diagnostikas informāciju, kas ir jāparāda nekavējoties, lai izvairītos no buferizācijas izraisītas kavēšanās.

Piemērs: izmantojot cerr:

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

Izvade

 This is an error message. 

buferēta standarta kļūdu straume (aizsērējums):

aizsprostojums apzīmē 'standarta žurnāls' . Tā ir buferizēta straume, līdzīga cout. To bieži izmanto, lai rakstītu informatīvus vai diagnostikas ziņojumus, kas ir mazāk jutīgi nekā kļūdas. Buferizācijas izmantošana var uzlabot veiktspēju, parādot lielu skaitu ziņojumu.

Piemērs: izmantojot aizsērējumu

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

Izvade

 This is an informational message. 

Abos piemēros izvade tiks parādīta konsolē. Tomēr galvenā atšķirība starp cerr un nosprostot slēpjas to buferiskajā uzvedībā. Tā nebuferētā rakstura dēļ ziņojumi tiek nosūtīti uz cerr tiek parādīti uzreiz, bet ziņojumi, kas nosūtīti uz aizsērēšanu, var tikt buferēti, lai nodrošinātu lielāku ātrumu. Tomēr tie joprojām parādīsies konsolē.

Piezīme. Ir svarīgi atcerēties, ka ziņojuma veids, kuru vēlaties parādīt, noteiks, vai izmantojat cerr vai clog. Izmantojiet cerr svarīgiem ziņojumiem, kuriem nepieciešama tūlītēja uzmanība (piemēram, kļūdu ziņojumiem), un izmantojiet aizsērējumu mazāk kritiskiem diagnostikas vai informatīviem ziņojumiem, kurus var buferizēt, lai nodrošinātu labāku veiktspēju.