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

โšก Slimme samenvatting

C++ Invoer- en uitvoerbewerkingen zijn gebaseerd op streamobjecten die gegevens als byte-reeksen tussen programma's en apparaten verplaatsen, waarbij cin toetsenbordinvoer leest en cout, cerr en clog uitvoer naar het scherm schrijven.

  • ๐Ÿ”˜ Stromen: Invoer- en uitvoertaken worden verzonden als byte-reeksen, ook wel streams genoemd, die gegevens tussen het hoofdgeheugen en de apparaten verplaatsen.
  • ๐Ÿ“ฅ Headerbestanden: De bibliotheken iostream, iomanip en fstream definiรซren de objecten en manipulators die worden gebruikt voor basisinvoer en -uitvoer.
  • ๐Ÿ–จ๏ธ cout en cin: Het `cout`-object print met de invoegoperator, terwijl `cin` waarden leest met de `ex`-operator.tractie operator.
  • โš ๏ธ cerr en clog: Beide programma's melden fouten, maar cerr blijft ongebufferd voor onmiddellijke weergave, terwijl clog eerst berichten buffert.
  • ๏ธ Foutafhandeling: De controles 'good', 'bad', 'fail' en 'eof' lezen de status van de stream, waardoor mislukte bewerkingen veilig worden opgevangen.
  • ๐Ÿค– AI-assistentie: AI-codeerassistenten zoals GitHub Copilot genereren standaard cin- en cout-code op basis van een korte opmerking of functienaam.

C++ Basisinvoer en -uitvoer

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 met behulp van get/put-pointers aangeven waar de I/O zal plaatsvinden.
  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:

KlasseFuncties
BestandbufHet stelt bestandsbuffers in op lezen/schrijven. Het heeft close() en open() functies erin
fstreambasisHet is de basisklasse voor de klassen ifstream, fstream en ofstream. De bewerkingen ervan zijn gemeenschappelijk voor de bestandsstromen.
alsstroomHet is een invoerbestandsstroomklasse voor het leveren van invoerbewerkingen.
van stroomHet is een uitvoerbestandsstroomklasse voor het uitvoeren van uitvoerbewerkingen.
fstroomHet 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 Uitleg:

  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 'welcome' om de tekenreeks 'Welcome to' in op te slaan. Guru99.
  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 het `ex`-object gebruikt.tracDe ex-operator (>>).tracHet tion-object is verantwoordelijk voor extracting data ingevoerd via het toetsenbord vanuit 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 Uitleg:

  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 Uitleg:

  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 Uitleg:

  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

Dezelfde streamobjecten rapporteren ook of een bewerking is geslaagd, wat blijkt uit de statuscontroles van de stream.

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

Veelgestelde vragen

Het `cout`-object is typeveilig en gebruikt de invoegoperator, waardoor het automatisch het type van elke waarde detecteert. De `printf`-functie van C is afhankelijk van opmaakspecificaties zoals `%d` die handmatig moeten overeenkomen met de argumenten.

De extracDe `tion`-operator stopt bij de eerste spatie, dus `cin` leest slechts รฉรฉn woord. Om een โ€‹โ€‹hele regel inclusief spaties vast te leggen, roept u `getline(cin, variabele)` aan, die leest tot aan het regeleinde-teken.

Beide commando's beginnen een nieuwe regel, maar `endl` leegt ook elke keer de uitvoerbuffer, wat drukke lussen kan vertragen. Geef de voorkeur aan een simpele nieuwe regel en reserveer `endl` voor situaties waarin de buffer onmiddellijk geleegd moet worden.

De objecten cin, cout, cerr en clog bevinden zich in de namespace std. Door namespace std te gebruiken, kun je cout typen in plaats van std::cout. Grote projecten behouden vaak expliciet het voorvoegsel std om conflicten te voorkomen.

Voeg de iomanip-header toe en gebruik manipulators met cout. De setw-manipulator reserveert een veldbreedte en setprecision stelt in hoeveel cijfers er worden weergegeven, waardoor getallen en kolommen worden geformatteerd zonder de opgeslagen waarden te wijzigen.

Ja. Omdat `cout` en `cerr` aparte streams zijn, kan een shell de normale uitvoer naar een bestand omleiden, terwijl foutmeldingen nog steeds op het scherm verschijnen. In code kan `rdbuf` een stream naar een andere buffer laten verwijzen.

Ja. AI-codeerassistenten lezen een commentaar of functienaam en genereren cin- en cout-instructies, plus de iostream include en een geformatteerde prompt. RevHet is verstandig om de gegenereerde streamlogica te controleren op uitzonderingen.

Ja. GitHub-copiloot Voltooit de cout-opmaak, cin-validatielussen en cerr-foutcontroles terwijl u typt. Het is 2026 C++ Code-intelligentie voegt semantisch symboolbewustzijn toe, waardoor suggesties voor meerdere bestanden consistent blijven.

Vat dit bericht samen met: