C++ Grundläggande ingång/utgång: Cout, Cin, Cerr Exempel

⚡ Smart sammanfattning

C++ In- och utdataoperationer är beroende av strömobjekt som flyttar data som bytesekvenser mellan program och enheter, där cin läser tangentbordsinmatning och cout, cerr och clog skriver utdata till skärmen.

  • 🔘 Strömmar: In- och utdatauppgifter färdas som bytesekvenser som kallas strömmar, och flyttar data mellan huvudminnet och enheter.
  • 📥 Headerfiler: Biblioteken iostream, iomanip och fstream definierar de objekt och manipulatorer som används för grundläggande in- och utdata.
  • 🖨️ cout och cin: Cout-objektet skriver ut med infogningsoperatorn, medan cin läser värden med ex.tractionsoperatör.
  • ⚠️ cerr och täppa: Båda rapporterar fel, men cerr förblir obuffrad för omedelbar visning medan clog buffrar meddelanden först.
  • 🛠️ Felhantering: Kontrollerna good, bad, fail och eof läser strömmens tillstånd, så misslyckade operationer fångas upp säkert.
  • 🤖 AI-hjälp: AI-kodningsassistenter som GitHub Copilot genererar cin- och cout-standardtexter från en kort kommentar eller ett funktionsnamn.

C++ Grundläggande ingångs- och utgångsdata

Vad finns Streams i C++?

C++ ger användarna ett antal bibliotek som de kan använda för att utföra inmatnings-/utmatningsuppgifter. Dessa uppgifter görs i form av bytesekvenser, populärt kallade strömmar.

Strömmarna är uppdelade i två:

Typer av strömmar

  • Indataström: Detta är en typ av ström där byten flödar från en enhet som ett tangentbord till huvudminnet.
  • Utdataström: Detta är en typ av ström där byten flödar i motsatt riktning, det vill säga från huvudminnet och sedan till enheten som bildskärmen.

Hur fungerar streams?

C++ strömmar fungerar enligt följande:

  1. Först initieras en ström med rätt typ.
  2. Därefter bör du ange var I/O-funktionen kommer att ske med hjälp av get/put-pekare.
  3. Efter att ha kommit till rätt plats i en ström kan du utföra inmatnings- och utdatauppgifter med operatorerna >> respektive <<.

Funktionstabell

Följande är funktionerna i stream.h-huvudfilen:

KlassFunktioner
FilebufDen ställer in filbuffertar för att läsa/skriva. Den har funktionerna close() och open() i sig
fstreambaseDet är basklassen för klasserna ifstream, fstream och ofstream. Dess funktioner är gemensamma för filströmmarna.
ifstreamDet är en indatafilströmsklass för att tillhandahålla inmatningsoperationer.
ofstreamDet är en utdatafilströmsklass för att tillhandahålla utdataoperationer.
fstreamDet är en in-/utgångsströmklass. Den stöder samtidiga in-/utgångsoperationer.

C++ Rubrikfiler för in-/utgång

C++ tillhandahåller tre bibliotek som kommer med funktioner för att utföra grundläggande in-/utuppgifter. De inkluderar:

  • Iostream: Det är en akronym för standard input/output stream. Denna rubrikfil kommer med definitioner för objekt som cin/cout/cerr.
  • Iomanip: Det är en akronym för input/output manipulatorer. Biblioteket kommer med funktioner som kan användas för att manipulera strömmar. Den innehåller definitioner för objekt som setw, setprecision och andra.
  • Fstream: Detta är en rubrikfil för att beskriva filströmmen. Den hanterar data som läses från fil som indata eller som skrivs till en fil, output.

Nyckelorden cin och cout är mycket populära i C++. De används för att ta indata respektive utskrifter. För att använda dem måste du inkludera iostream-huvudfilen i ditt program. Anledningen är att de är definierade i den rubrikfilen. Underlåtenhet att inkludera iostream-huvudfilen kommer att generera ett fel. Detta beror på ett misslyckande av C++ kompilator för att förstå innebörden av sökorden.

Huvudobjekten som definieras i iostream-huvudfilen är cin, cout, cerr och clog. Låt oss diskutera dem.

std::ut

Cout-objektet är en instans av iostream-klassen. Den används för att producera utdata på en standardutgångsenhet, som normalt är skärmen. Den används tillsammans med ströminsättningsoperatorn (<<).

Exempelvis

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

	char welcome[] = "Welcome to Guru99";

	cout << welcome << endl;

	return 0;
}

Produktion:

std::ut

Här är en skärmdump av koden:

std::ut

Code Förklaring:

  1. Inkludera iostream-huvudfilen där cout-objektet är definierat.
  2. Inkludera std-namnområdet så att vi inte behöver kalla det när vi använder dess klasser.
  3. Anropa main()-funktionen. Programkoden ska läggas till i dess kropp. Det öppningsbara locket { markerar början av dess kropp.
  4. Skapa en teckenvariabel med namnet welcome för att innehålla strängen Welcome to Guru99.
  5. Skriv ut värdet på välkomststrängen på konsolen. Slutet är en C++ nyckelord som betyder slutrad. Den flyttar markören för att börja skriva ut text på nästa rad.
  6. Programmet måste returnera värde vid framgångsrikt genomförande.
  7. Slutet på huvuddelen av funktion main().

std::cin

cin-objektet är en instans av istream-klassen. Det läser indata från inmatningsenheten, tangentbordet. Det används normalt tillsammans med extractionsoperatorn (>>). Ex.tractionobjektet ansvarar för extracdata som matats in via tangentbordet från cin-objektet.

Exempelvis

Följande exempel visar hur man använder nyckelordet cin i C++:

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

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

	return 0;
}

Produktion:

std::cin

Här är en skärmdump av koden:

std::cin

Code Förklaring:

  1. Inkludera iostream-huvudfilen i vårt program. cin-objektet definieras i denna rubrikfil.
  2. Inkludera std-namnområdet för att använda dess klasser. Du behöver inte anropa std när du använder dess klasser.
  3. Anropa main()-funktionen. Programkoden ska läggas till i dess kropp.
  4. Början av programmets brödtext.
  5. Förklara en heltalsvariabel namngett nummer.
  6. Skriv ut ett meddelande på skärmen som uppmanar användaren att ange ett nummer.
  7. Läs värdet som användaren angett på konsolen från tangentbordet.
  8. Skriv ut värdet ovan på konsolen tillsammans med annan text.
  9. Programmet bör returnera ett värde om det körs framgångsrikt.
  10. Slutet av kroppen av huvudfunktionen.

std::cerr

cerr-objektet bildar standardfelströmmen för att mata ut fel i C++. Cerr är en instans av klassen ostream. Cerr-objektet är obuffrat. Det betyder att den används när ett felmeddelande ska visas omedelbart.

Eftersom den är obuffrad lagrar den inte felmeddelanden för en senare visning. Den används tillsammans med ströminsättningsoperatorn (<<).

Exempelvis

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

	cerr << "An Error occurred!";

	return 0;
}

Produktion:

std::cerr

Här är en skärmdump av koden:

std::cerr

Code Förklaring:

  1. Inkludera iostream header-fil där cerr-objektet har definierats.
  2. Inkludera std-namnområdet så att vi inte behöver kalla det när vi använder dess klasser.
  3. Anropa main()-funktionen. Programlogiken bör läggas till i dess kropp. Det öppningsbara locket markerar början av funktionens kropp.
  4. Använd cerr-objektet för att skriva ut ett fel på konsolen.
  5. Programmet måste returnera ett värde vid framgångsrikt genomförande.
  6. Slutet av kroppen av huvudfunktionen.

std::täppa

Clog-objektet är en instans av klassen ostream. Den används för att visa fel på standardskärmen, monitorn. Det liknar cerr-objektet, men det är buffrat. Eftersom den är buffrad, lagrar den felmeddelandet i bufferten tills bufferten är fylld/tömd. Den används tillsammans med ströminsättningsoperatorn (<<).

Exempelvis

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

Produktion:

std::täppa

Här är en skärmdump av koden:

std::täppa

Code Förklaring:

  1. Inklusive iostream-huvudfilen där clog-objektet är definierat.
  2. Inklusive std-namnområdet så att vi kan använda dess klasser utan att anropa det.
  3. Anropar funktionen main(). Programlogiken bör läggas till i dess kropp. { markerar början av funktionens kropp.
  4. Använd tilltäppningsobjektet för att skriva ut ett fel på standardutgången, monitorn.
  5. Programmet måste returnera ett värde efter framgångsrikt slutförande.
  6. Slutet på huvuddelen av funktion main().

Felhantering med IO-strömmar

Samma strömobjekt rapporterar också om en operation lyckades, vilket strömtillståndskontroller avslöjar.

För att kontrollera om en stream är giltig eller inte, kan du använda den som en boolesk.

Här är ett exempel:

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

För att få mer information om strömningsstatus kan du använda dessa funktioner:

  • good()- kommer att returnera sant om allt är okej.
  • bad()- returnerar true om ett allvarligt fel inträffar.
  • fail()- kommer att returnera true efter misslyckad streamoperation.
  • eof()- returnerar true om den når slutet av en fil.

För att veta om en viss läs-/skrivoperation misslyckades, testa läsresultatet.

Till exempel, för att kontrollera om användaren har angett ett giltigt heltal, gör så här:

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

Vanliga frågor

Cout-objektet är typsäkert och använder insertionsoperatorn, så det detekterar varje värdes typ automatiskt. C:s printf förlitar sig på formatspecifikationer som %d som måste matcha argumenten manuellt.

Exettraction-operatorn stannar vid det första mellanslaget, så cin läser bara ett ord. För att läsa en hel rad med mellanslag, anropa getline(cin, variabel), som läser upp till nyradstecknet.

Båda startar en ny rad, men endl tömmer också utdatabufferten varje gång, vilket kan göra att upptagna loopar långsammare. Föredra en vanlig nyrad och reservera endl för när bufferten måste tömmas omedelbart.

Objekten cin, cout, cerr och clog finns i namnrymden std. Att skriva med namnrymden std låter dig skriva cout istället för std::cout. Stora projekt behåller ofta det explicita std-prefixet för att undvika kollisioner.

Inkludera iomanip-headern och använd manipulatorer med cout. Manipulatorn setw reserverar en fältbredd, och setprecision anger hur många siffror som visas, och formaterar tal och kolumner utan att ändra de lagrade värdena.

Ja. Eftersom cout och cerr är separata strömmar kan ett shell omdirigera normal utdata till en fil medan fel fortfarande når skärmen. I kod kan rdbuf peka en ström mot en annan buffert.

Ja. AI-kodningsassistenter läser en kommentar eller ett funktionsnamn och producerar cin- och cout-satser, plus iostream include och en formaterad prompt. RevAtt visa den genererade strömlogiken för kantfall förblir klokt.

Ja. GitHub Copilot slutför cout-formatering, cin-valideringsloopar och cerr-felkontroller medan du skriver. Det är 2026 C++ Kodintelligens ökar medvetenheten om semantiska symboler, så att förslag på flera filer förblir konsekventa.

Sammanfatta detta inlägg med: