C++ Basisinvoer/uitvoer: voorbeeld Cout, Cin, Cerr

Wat zijn stromen in C++?

C++ biedt gebruikers een aantal bibliotheken die ze kunnen gebruiken om invoer-/uitvoertaken uit te voeren. Deze taken worden uitgevoerd in de vorm van bytereeksen, in de volksmond streams genoemd.

De stromen zijn in tweeën verdeeld:

Soorten stromen

  • Invoerstroom: Dit is een type stream waarbij de bytes van een apparaat zoals een toetsenbord naar het hoofdgeheugen stromen.
  • Uitvoerstroom: Dit is een type stream waarbij de bytes in de tegenovergestelde richting stromen, dat wil zeggen van het hoofdgeheugen naar het apparaat, zoals het beeldscherm.

Hoe werken streams?

C++-streams werken als volgt:

  1. Eerst wordt een stream geïnitialiseerd met het juiste type.
  2. Vervolgens moet u aangeven waar de I / O zal plaatsvinden met behulp van get/put-aanwijzers.
  3. Nadat u op de juiste locatie in een stream bent aangekomen, kunt u invoer- en uitvoertaken uitvoeren met respectievelijk de operatoren >> en <<.

Functietabel

De following zijn de functies in het headerbestand stream.h:

Klasse Functies
Bestandbuf Het stelt bestand buffers om te lezen/schrijven. Het bevat de functies close() en open().
fstreambasis Het is de basisklasse voor de klassen ifstream, fstream en ofstream. De werking ervan is gemeenschappelijk voor de bestandsstromen.
alsstroom Het is een invoerbestandsstroomklasse voor het leveren van invoerbewerkingen.
van stroom Het is een uitvoerbestandsstroomklasse voor het leveren van uitvoerbewerkingen.
fstroom Het is een input/output-streamklasse. Het ondersteunt gelijktijdigneoons invoer/uitvoerbewerkingen.

C++ Header-bestanden voor invoer/uitvoer

C++ biedt drie bibliotheken met functies voor het uitvoeren van basisinvoer-/uitvoertaken. Ze bevatten:

  • Iostream: Het is een acroniem voor standaard invoer/uitvoerstroom. Dit headerbestand bevat definities voor objecten zoals cin/cout/cerr.
  • Iomanip: Het is een acroniem voor invoer/uitvoermanipulatoren. De bibliotheek wordt geleverd met functies die kunnen worden gebruikt voor het manipuleren van streams. Het bevat definities voor objecten zoals setw, setprecision en andere.
  • Fstream: Dit is een headerbestand voor het beschrijven van de bestandsstroom. Het verwerkt gegevens die uit een bestand worden gelezen als invoer of die naar een bestand, de uitvoer, worden geschreven.

De trefwoorden cin en cout zijn erg populair in C++. Ze worden respectievelijk gebruikt voor het opnemen van invoer en het afdrukken van uitvoer. Om ze te gebruiken, moet u het iostream-headerbestand in uw programma opnemen. De reden is dat ze in dat headerbestand zijn gedefinieerd. Als u het iostream-headerbestand niet opneemt, wordt er een fout gegenereerd. Dit is het gevolg van een onvermogen van de C++-compiler om de betekenis van de trefwoorden te begrijpen.

De belangrijkste objecten die in het iostream-headerbestand zijn gedefinieerd, zijn cin, cout, cerr en clog. Laten we ze bespreken.

standaard::cout

Het cout-object is een instantie van de klasse iostream. Het wordt gebruikt voor het produceren van uitvoer op een standaard uitvoerapparaat, normaal gesproken het scherm. Het wordt samen met de operator voor het invoegen van streams gebruikt (<<).

Voorbeeld

#include <iostream>
using namespace std;
int main() {

	char welcome[] = "Welcome to Guru99";

	cout << welcome << endl;

	return 0;
}

Output:

standaard::cout

Hier is een screenshot van de code:

standaard::cout

Code Verklaring:

  1. Neem het iostream-headerbestand op waarin het cout-object is gedefinieerd.
  2. Neem de std-naamruimte op, zodat we deze niet hoeven aan te roepen bij het gebruik van de klassen ervan.
  3. Roep de functie main() aan. De programmacode moet in de hoofdtekst worden toegevoegd. De openende accolade { markeert het begin van zijn lichaam.
  4. Maak een tekenvariabele met de naam welkom om de tekenreeks Welkom bij Guru99 vast te houden.
  5. Druk de waarde van de tekenreeks welkom op de console af. De endl is een C++-sleutelwoord dat eindregel betekent. Het verplaatst de cursor om te beginnen met het afdrukken van tekst op de volgende regel.
  6. Het programma moet waarde retourneren bij succesvolle uitvoering.
  7. Einde van de hoofdtekst van de functie main().

std::cin

Het cin-object is een instantie van de klasse istream. Het leest de invoer van het invoerapparaat, het toetsenbord. Het wordt normaal gesproken samen met de extractie-operator gebruikt (>>). Het extractieobject is verantwoordelijk voor het extraheren van gegevens die via het toetsenbord zijn ingevoerd uit het cin-object.

Voorbeeld

De following voorbeeld laat zien hoe u het trefwoord cin gebruikt C + +:

#include <iostream>
using namespace std;
int main()
{
	int number;

	cout << "Enter a number:";
	cin >> number;
	cout << "\nYou entered: " << number;

	return 0;
}

Output:

std::cin

Hier is een screenshot van de code:

std::cin

Code Verklaring:

  1. Neem het iostream-headerbestand op in ons programma. Het cin-object wordt gedefinieerd in dit headerbestand.
  2. Neem de std-naamruimte op om de klassen ervan te gebruiken. U hoeft std niet aan te roepen als u de klassen ervan gebruikt.
  3. Roep de functie main() aan. De programmacode moet in de hoofdtekst worden toegevoegd.
  4. Het begin van de hoofdtekst van het programma.
  5. Verklaar een gehele variabele genoemd nummer.
  6. Druk een bericht op het scherm af waarin de gebruiker wordt gevraagd een nummer in te voeren.
  7. Lees de waarde die de gebruiker op de console heeft ingevoerd vanaf het toetsenbord.
  8. Druk de hierboven gelezen waarde af op de console, samen met andere tekst.
  9. Het programma zou een waarde moeten retourneren als het succesvol wordt uitgevoerd.
  10. Einde van de hoofdtekst van de hoofdfunctie.

std::cerr

Het cerr-object vormt de standaard foutenstroom voor het uitvoeren van fouten in C++. Cerr is een exemplaar van de ostream-klasse. Het cerr-object is unbufferred. Dit betekent dat het wordt gebruikt wanneer er onmiddellijk een foutmelding moet worden weergegeven.

Aangezien het onbuffered, het slaat geen foutmelding op voor a later weergave. Het wordt samen met de operator voor het invoegen van streams gebruikt (<<).

Voorbeeld

#include <iostream>
using namespace std;
int main() {

	cerr << "An Error occurred!";

	return 0;
}

Output:

std::cerr

Hier is een screenshot van de code:

std::cerr

Code Verklaring:

  1. Voeg een iostream-headerbestand toe waarin het cerr-object is gedefinieerd.
  2. Neem de std-naamruimte op, zodat we deze niet hoeven aan te roepen bij het gebruik van de klassen ervan.
  3. Roep de functie main() aan. De programmalogica moet in de hoofdtekst worden toegevoegd. De openende accolade markeert het begin van de hoofdtekst van de functie.
  4. Gebruik het cerr-object om een ​​fout op de console af te drukken.
  5. Het programma moet bij succesvolle uitvoering een waarde retourneren.
  6. Einde van de hoofdtekst van de hoofdfunctie.

std::verstopping

Het clog-object is een instantie van de ostream-klasse. Het wordt gebruikt om fouten weer te geven op het standaarddisplay, de monitor. Het lijkt op het cerr-object, maar dat is het wel bufferred. Sinds het buffered, het slaat de foutmelding op buffer tot de buffer is gevuld/gespoeld. Het wordt samen met de operator voor het invoegen van streams gebruikt (<<).

Voorbeeld

#include <iostream>
using namespace std;
int main() {
	clog << "An Error occurred!";
	return 0;
}

Output:

std::verstopping

Hier is een screenshot van de code:

std::verstopping

Code Verklaring:

  1. Inclusief het iostream headerbestand waarin het clog-object is gedefinieerd.
  2. Inclusief de std-naamruimte, zodat we de klassen ervan kunnen gebruiken zonder deze aan te roepen.
  3. De functie main() aanroepen. De programmalogica moet in de hoofdtekst worden toegevoegd. De { markeert het begin van de hoofdtekst van de functie.
  4. Gebruik het clog-object om een ​​fout af te drukken op de standaarduitvoer, de monitor.
  5. Het programma moet bij succesvolle voltooiing een waarde retourneren.
  6. Het einde van de hoofdtekst van de functie main().

Foutafhandeling met IO-streams

Om te controleren of een stream geldig is of niet, kunt u deze als Boolean gebruiken.

Hier is een voorbeeld:

ifstream file( "myfile.txt" );
if ( ! file )
{
        cout << "File NOT opened!" << endl;
}

Om meer de te krijgentails voor de streamstatus kunt u deze functies gebruiken:

  • good()- zal true retourneren als alles in orde is.
  • bad()- retourneert true als er een fatale fout optreedt.
  • fail()- retourneert true na een mislukte streambewerking.
  • eof()- retourneert true als het einde van een bestand wordt bereikt.

Om te weten of een bepaalde lees-/schrijfbewerking is mislukt, test u het leesresultaat.

Om bijvoorbeeld te controleren of de gebruiker een geldig geheel getal heeft ingevoerd, doet u het volgende:

int p;
if ( cin >> p ) 
{
        cout << "Enter valid number" << endl;
}

Samengevat

  • De invoer- en uitvoertaken in C++ worden uitgevoerd via bytesequentie. De bytes worden stromen genoemd.
  • In een invoerstroom stromen de bytes van het invoerapparaat, zoals een toetsenbord, naar het hoofdgeheugen.
  • In een uitvoerstroom worden de bytes vanuit het hoofdgeheugen vervolgens naar een uitvoerapparaat zoals een monitor gestuurd.
  • Het cin-object is een instantie van de klasse istream. Het leest invoer van een invoerapparaat zoals het toetsenbord.
  • Het cout-object is een instantie van de ostream-klasse. Het produceert uitvoer op uitvoerapparaten zoals de monitor.
  • Het cerr-object is een instantie van de klasse ostream. Het geeft foutobjecten weer op de monitor.
  • Het clog-object is een exemplaar van de ostream-klasse. Het geeft foutmeldingen weer op uitvoerapparaten.
  • Het verstoppingsobject buffers foutmeldingen, terwijl het cerr-object dat niet doet.