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

Wat zijn streams in C++?

C++ biedt gebruikers een aantal bibliotheken die ze kunnen gebruiken om input/output-taken uit te voeren. Deze taken worden uitgevoerd in de vorm van byte-sequenties, 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. Zodra u op de juiste locatie in een stream bent, kunt u invoer- en uitvoertaken uitvoeren met behulp van respectievelijk de operatoren >> en <<.

Functietabel

De volgende functies worden aangeboden in het stream.h-headerbestand:

Klasse Functies
Bestandbuf Het stelt bestandsbuffers in op lezen/schrijven. Het heeft close() en open() functies erin
fstreambasis Het is de basisklasse voor de klassen ifstream, fstream en ofstream. De bewerkingen ervan zijn gemeenschappelijk voor de bestandsstromen.
alsstroom Het is een invoerbestandsstroomklasse voor het leveren van invoerbewerkingen.
van stroom Het is een uitvoerbestandsstroomklasse voor het uitvoeren van uitvoerbewerkingen.
fstroom Het is een input/output stream class. Het ondersteunt gelijktijdige input/output-bewerkingen.

C++ Headerbestanden voor invoer/uitvoer

C++ biedt drie bibliotheken die functies bevatten voor het uitvoeren van basis input/out-taken. Deze omvatten:

  • 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 gebruikt voor het nemen van invoer en het afdrukken van uitvoer. Om ze te gebruiken, moet u het iostream-headerbestand in uw programma opnemen. De reden hiervoor 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 fout 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 iostream-klasse. Het wordt gebruikt voor het produceren van uitvoer op een standaard uitvoerapparaat, wat normaal gesproken het scherm is. Het wordt samen met de stream insertion operator (<<) 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. Print de waarde van de string welcome op de console. De endl is een C++ trefwoord betekenis eindregel. Het verplaatst de cursor om tekst op de volgende regel af te drukken.
  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 istream-klasse. Het leest invoer van het invoerapparaat, het toetsenbord. Het wordt normaal gesproken samen met de extractie-operator (>>) gebruikt. Het extractie-object is verantwoordelijk voor het extraheren van gegevens die via het toetsenbord zijn ingevoerd uit het cin-object.

Voorbeeld

Het volgende voorbeeld laat zien hoe u het trefwoord cin kunt gebruiken in 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 standaardfoutstroom voor het uitsturen van fouten in C++. Cerr is een instantie van de ostream-klasse. Het cerr-object is ongebufferd. Dit betekent dat het wordt gebruikt wanneer een foutmelding onmiddellijk moet worden weergegeven.

Omdat het ongebufferd is, slaat het geen foutmelding op voor een latere weergave. Het wordt samen met de stream insertion operator (<<) 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 standaardscherm, de monitor. Het lijkt op het cerr-object, maar het is gebufferd. Omdat het gebufferd is, slaat het de foutmelding op in de buffer totdat de buffer is gevuld/geflushed. Het wordt samen met de stream insertion operator (<<) 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;
}

Voor meer informatie over de streamstatus kunt u de volgende 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;
}

Samenvatting

  • De invoer- en uitvoertaken In C++ worden gedaan via byte sequence. De bytes worden streams 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 clog-object buffert foutmeldingen, terwijl het cerr-object dat niet doet.