logo

C++-perustulo ja -lähtö (I/O)

C++ I/O -toiminnassa käytetään virtauskonseptia. Tavusarjaa tai tietovirtaa kutsutaan virraksi. Se nopeuttaa suorituskykyä.

Jos tavuja siirretään päämuistista laitteeseen, kuten tulostimeen, näyttöön, verkkoyhteyteen jne., tätä kutsutaan tulostustoiminnoksi.

Syöttötoiminto tapahtuu, kun tavuja virtaa laitteesta, kuten tulostimesta, näytöstä tai verkkoyhteydestä päämuistiin.

C++:ssa, ennalta määritettyjä toimintoja ja ilmoitukset toimitetaan otsikkotiedostojen kautta, jolloin voit tehdä tiettyjä tehtäviä ilman, että sinun tarvitsee kirjoittaa uutta koodia alusta alkaen. Muutamat tärkeät C++:n syöttö-/tulostustoimintojen otsikkotiedostot sisältävät toimintoja syöttö- ja tulostustehtävien tehokkaaseen suorittamiseen. C++ Standard Library, kokoelma luokkia ja menetelmiä, jotka on luotu C++-ohjelmointikielellä, sisältää nämä otsikkotiedostot. Keskustellaan tärkeimmistä syöttö-/tulostustoimintojen otsikkotiedostoista:

Otsikkotiedosto Toiminto ja kuvaus
Sitä käytetään määrittelemään cout, cin ja cerr objektit, jotka vastaavat standardilähtövirtaa, standarditulovirtaa ja standardivirhevirtaa.
Sitä käytetään ilmoittamaan palveluista, jotka ovat hyödyllisiä alustetun I/O:n suorittamiseen, kuten esim settarkkuus ja setw.
Sitä käytetään ilmoittamaan palvelut käyttäjän ohjaamaa tiedostojen käsittelyä varten.

iostream: Se on yksi tärkeimmistä C++:n syöttö-/tulostustoimintojen otsikkotiedostoista. Se tarkoittaa 'input-output' virta. Erilaisten tulo-/lähtövirtojen kanssa työskentelyyn iostream otsikkotiedosto sisältää luokat istream (syöttövirta) ja ostream (lähtövirta) sekä sen johdetut luokat ifstream, offstream , ja stringstream . Tämän otsikkotiedoston yleisimmin käytetyt luokat ovat cin (vakiosyöttö) ja cout (vakiolähtö) , joiden avulla voit lukea käyttäjän syötteitä ja näyttää ulostulon konsoliin. Esimerkiksi:

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

Lähtö

 Enter a number: 42 You entered: 42 

iomanip: Tämä otsikkotiedosto tarkoittaa 'panos-lähtö-manipulaatio' . Se tarjoaa työkalut muotoiluun syöttö ja ulostulo . Sen avulla voit muokata kohdistus, leveys, tarkkuus , ja muut tulon ja lähdön muotoiluominaisuudet. Setw, setprecision, kiinteä, vasen, oikea , ja muut säännöllisesti käytetyt toiminnot on lueteltu alla. Se on erityisen kätevä tietojen esittämiseen tietyllä tavalla.

Esimerkki:

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

Lähtö

kaupungit australiassa
 Value of pi: 3.14 

stream: Tiedoston syöttö/tulostustoimintojen otsikkotiedosto kutsutaan fstream . Se sisältää luokat tiedostoista lukemiseen ja tiedostoihin kirjoittamiseen ifstream (syöttötiedostovirta) ja offstream (tulostustiedostovirta) . Järjestelmä käyttää näitä luokkia vain luku - ja kirjoitus -tiedostojen avaamiseen.

Esimerkki:

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

Lähtö

 The file was written successfully. 

Nämä otsikkotiedostot ovat tärkeimpiä C++-syöttö-/tulostustehtävissä. Jokaisella on erityinen tarkoitus, ja ne tarjoavat työkalut, joita tarvitaan onnistuneesti syötteisiin ja tulosteisiin liittyvien tehtävien hallintaan riippumatta siitä, onko se vuorovaikutuksessa konsoli, muotoilutulostus tai tiedostojen käsittelystä.

C++:ssa käytämme usein 'using namespace std;' otsikkotiedostojen jälkeen. The nimiavaruus std; lausetta käytetään usein C++:ssa koodin virtaviivaistamiseen käytettäessä tavallisia kirjastokomponentteja. Tarkastellaan tarkemmin tämän lausunnon toimintaa ja sovellusta:

A nimiavaruus on tekniikka samanlaisten tunnisteiden ryhmittelyyn (esim luokat, toiminnot , ja muuttujia ) nimiristiriitojen estämiseksi. C++ Standard Library tarjoaa osansa (kuten cin, cout jne.) std-nimiavaruuden alla.

Termi 'standardi' on lyhennetty 'std' , ja kaikki vakiokirjaston elementit sisältyvät siihen. Näin tekemällä nimiristiriidat koodiisi määritettyjen tunnisteiden kanssa vähenevät.

Puhutaan nyt siitä, miksi käyttämällä nimiavaruutta std; lausetta käytetään:

Käyttämättä nimitilaa 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; } 

Kuten näet, käyttämällä nimiavaruus std; lausekkeen avulla voit jättää pois std:: etuliite kun käytät kirjaston vakiokomponentteja. Se tekee koodistasi lyhyemmän ja luettavamman, koska sinun ei tarvitse toistaa std:: ennen jokaista standardikirjastotunnusta.

I/O-kirjaston otsikkotiedostot

Vakiolähtövirta (cout):

Cout-objekti on ostream-luokan ennalta määritetty objekti. Se on kytketty vakiolähtölaitteeseen, joka on yleensä näyttö. Cout käytetään yhdessä streamin lisäysoperaattorin kanssa (<<) to show the output on a console< p>

Katsotaanpa yksinkertainen esimerkki tavallisesta lähtövirrasta (cout):

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

Lähtö

 Value of ary is: Welcome to C++ tutorial 

Vakiosyöttövirta (cin)

The syöminen on ennalta määritetty objekti virta luokkaa. Se on yhdistetty tavalliseen syöttölaitteeseen, joka on yleensä näppäimistö. Cin:tä käytetään yhdessä virranpoisto-operaattorin (>>) kanssa lukemaan syöte konsolista.

Katsotaanpa yksinkertainen esimerkki tavallisesta syöttövirrasta (cin):

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

Lähtö

 Enter your age: 22 Your age is: 22 

Normaali loppurivi (endl)

The endl on ennalta määritetty objekti vihollisemme luokkaa. Sitä käytetään lisäämään uusia rivimerkkejä ja huuhtelee virran.

Katsotaanpa yksinkertainen esimerkki tavallisesta loppurivistä (endl):

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

Puskuroimaton vakiovirhevirta (cerr):

cerr tarkoittaa 'tavallinen virhe' .

Se on puskuroimaton virta, mikä tarkoittaa, että tulos lähetetään cerr näkyy välittömästi konsolissa ilman puskurointia.

Sitä käytetään tyypillisesti virheilmoitusten ja diagnostisten tietojen näyttämiseen, jotka on näytettävä välittömästi puskuroinnin aiheuttamien viiveiden välttämiseksi.

Esimerkki: käyttämällä cerr:tä:

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

Lähtö

 This is an error message. 

puskuroitu vakiovirhevirta (tukos):

tukos tarkoittaa 'tavallinen loki' . Se on puskuroitu virta, samanlainen kuin cout. Sitä käytetään usein informaatio- tai diagnostisten viestien kirjoittamiseen, jotka ovat vähemmän aikaherkkiä kuin virheet. Puskuroinnin käyttö voi parantaa suorituskykyä, kun näytetään suuri määrä viestejä.

Esimerkki: tukkeuman käyttö

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

Lähtö

 This is an informational message. 

Molemmissa esimerkeissä tulos näkyy konsolissa. Kuitenkin tärkein ero cerr ja tukkia piilee heidän puskuroivassa käytöksessään. Puskuroimattoman luonteensa vuoksi viestit annettiin cerr näkyvät heti, mutta tukkeutumiseen lähetetyt viestit voidaan puskuroida nopeuden lisäämiseksi. Ne näkyvät kuitenkin lopulta konsolissa.

Huomautus: On tärkeää muistaa, että näytettävän viestin tyyppi määrittää, käytätkö cerr vai clog. Käytä cerr-sanomia keskeisille viesteille, jotka vaativat välitöntä huomiota (kuten virheilmoituksia), ja käytä clogia vähemmän kriittisille diagnostiikka- tai tiedotusviesteille, jotka voidaan puskuroida paremman suorituskyvyn parantamiseksi.