C++ Základní vstup/výstup: Příklad Cout, Cin, Cerr

⚡ Chytré shrnutí

C++ Vstupní a výstupní operace se spoléhají na objekty stream, které přesouvají data jako bajtové sekvence mezi programy a zařízeními, přičemž příkazy cin čte vstupy z klávesnice a příkazy cout, cerr a clog zapisují výstup na obrazovku.

  • 🔘 Proudy: Vstupní a výstupní úlohy se přenášejí jako bajtové sekvence zvané proudy, které přesouvají data mezi hlavní pamětí a zařízeními.
  • 📥 Záhlaví souborů: Knihovny iostream, iomanip a fstream definují objekty a manipulátory používané pro základní vstup a výstup.
  • 🖨️ cout a cin: Objekt cout tiskne s operátorem vkládání, zatímco cin čte hodnoty s operátorem ex.tracoperátor ce.
  • ⚠️ cerr a ucpávání: Oba hlásí chyby, ale cerr zůstává bez vyrovnávací paměti pro okamžité zobrazení, zatímco clog nejprve ukládá zprávy do vyrovnávací paměti.
  • 🛠️ Vypořádání se s chybou: Kontroly good, bad, fail a eof čtou stav streamu, takže neúspěšné operace jsou bezpečně zachyceny.
  • 🤖 Asistence AI: Asistenti pro kódování s umělou inteligencí, jako je GitHub Copilot, generují standardně použité kódy cin a cout z krátkého komentáře nebo názvu funkce.

C++ Základní vstupní výstup

V čem jsou streamy C++?

C++ poskytuje uživatelům řadu knihoven, které mohou používat k provádění vstupních/výstupních úloh. Tyto úlohy se provádějí ve formě bajtových sekvencí, lidově nazývaných proudy.

Proudy jsou rozděleny do dvou:

Typy proudů

  • Vstupní stream: Jedná se o typ toku, kde bajty proudí ze zařízení, jako je klávesnice, do hlavní paměti.
  • Výstupní proud: Jedná se o typ toku, kde bajty proudí opačným směrem, tedy z hlavní paměti do zařízení, jako je obrazovka.

Jak streamy fungují?

C++ streamy fungují následovně:

  1. Nejprve je proud inicializován správným typem.
  2. Dále byste měli pomocí ukazatelů get/put určit, kde se bude I/O provádět.
  3. Poté, co se dostanete na správné místo ve streamu, můžete provádět vstupní a výstupní úlohy pomocí operátorů >> a <<.

Tabulka funkcí

Následují funkce poskytované v záhlaví souboru stream.h:

TřídaFunkce
FilebufNastavuje vyrovnávací paměti souborů pro čtení/zápis. Má v sobě funkce close() a open().
fstreambaseJe to základní třída pro třídy ifstream, fstream a ofstream. Jeho operace jsou společné pro souborové proudy.
ifstreamJe to třída toku vstupních souborů pro poskytování vstupních operací.
ofstreamJe to třída proudu výstupního souboru pro poskytování výstupních operací.
fstreamJe to třída vstupního/výstupního proudu. Podporuje simultánní vstupně/výstupní operace.

C++ Soubory záhlaví pro vstup/výstup

C++ poskytuje tři knihovny, které přicházejí s funkcemi pro provádění základních vstupních/výstupních úloh. Patří mezi ně:

  • Iostream: Je to zkratka pro standardní vstup/výstup. Tento hlavičkový soubor je dodáván s definicemi objektů jako cin/cout/cerr.
  • Iomanip: Je to zkratka pro vstupně/výstupní manipulátory. Knihovna přichází s funkcemi, které lze použít pro manipulaci se streamy. Obsahuje definice objektů jako setw, setprecision a další.
  • Fstream: Toto je hlavičkový soubor pro popis datového proudu. Zpracovává data, která jsou načtena ze souboru jako vstup nebo která jsou zapsána do souboru, tedy výstupu.

Klíčová slova cin a cout jsou velmi populární v C++. Používají se pro odebírání vstupů, respektive tiskových výstupů. Chcete-li je používat, musíte do programu zahrnout soubor záhlaví iostream. Důvodem je, že jsou definovány v tomto hlavičkovém souboru. Pokud soubor záhlaví iostream nezadáte, dojde k chybě. To je důsledkem selhání ze strany C++ kompilátor, abyste pochopili význam klíčových slov.

Hlavní objekty definované v souboru záhlaví iostream jsou cin, cout, cerr a clog. Pojďme o nich diskutovat.

std::out

Objekt cout je instancí třídy iostream. Používá se pro produkci výstupu na standardním výstupním zařízení, kterým je normálně obrazovka. Používá se společně s operátorem vkládání proudu (<<).

Příklad

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

	char welcome[] = "Welcome to Guru99";

	cout << welcome << endl;

	return 0;
}

Výstup:

std::out

Zde je snímek obrazovky kódu:

std::out

Code Vysvětlení:

  1. Zahrňte soubor záhlaví iostream, kde je definován objekt cout.
  2. Zahrňte jmenný prostor std, abychom jej nemuseli volat při použití jeho tříd.
  3. Zavolejte funkci main(). Kód programu by měl být přidán do jeho těla. Otevřená složená závorka { označuje začátek jejího těla.
  4. Vytvořte znakovou proměnnou s názvem welcome, která bude obsahovat řetězec Vítejte. Guru99.
  5. Vytiskněte hodnotu řetězce welcome na konzole. Konec je a C++ klíčové slovo s významem koncový řádek. Přesune kurzor a začne tisknout text na dalším řádku.
  6. Po úspěšném provedení musí program vrátit hodnotu.
  7. Konec těla funkce main().

std::cin

Objekt cin je instancí třídy istream. Čte vstup ze vstupního zařízení, klávesnice. Obvykle se používá společně s ex.tracOperátor ce (>>). PříkladtracObjekt ce je zodpovědný za extraczpracování dat zadaných pomocí klávesnice z objektu cin.

Příklad

Následující příklad ukazuje, jak použít klíčové slovo cin in C++:

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

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

	return 0;
}

Výstup:

std::cin

Zde je snímek obrazovky kódu:

std::cin

Code Vysvětlení:

  1. Zahrňte hlavičkový soubor iostream do našeho programu. Objekt cin je definován v tomto souboru záhlaví.
  2. Chcete-li používat jeho třídy, zahrňte jmenný prostor std. Při použití jeho tříd nebudete muset volat std.
  3. Zavolejte funkci main(). Kód programu by měl být přidán do jeho těla.
  4. Spuštění těla programu.
  5. Prohlásit celočíselná proměnná jmenované číslo.
  6. Vytiskněte na obrazovku zprávu s výzvou k zadání čísla.
  7. Přečtěte hodnotu zadanou uživatelem na konzole z klávesnice.
  8. Vytiskněte hodnotu přečtenou výše na konzole vedle jiného textu.
  9. Pokud se program úspěšně spustí, měl by vrátit hodnotu.
  10. Konec těla hlavní funkce.

std::cerr

Objekt cerr tvoří standardní tok chyb pro výstup chyb C++. Cerr je instancí třídy ostream. Objekt cerr je bez vyrovnávací paměti. To znamená, že se používá, když se má okamžitě zobrazit chybová zpráva.

Protože je bez vyrovnávací paměti, neukládá chybovou zprávu pro pozdější zobrazení. Používá se společně s operátorem vkládání proudu (<<).

Příklad

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

	cerr << "An Error occurred!";

	return 0;
}

Výstup:

std::cerr

Zde je snímek obrazovky kódu:

std::cerr

Code Vysvětlení:

  1. Zahrňte soubor záhlaví iostream, kde byl definován objekt cerr.
  2. Zahrňte jmenný prostor std, abychom jej nemuseli volat při použití jeho tříd.
  3. Zavolejte funkci main(). Logika programu by měla být přidána do jeho těla. Otevřená složená závorka označuje začátek těla funkce.
  4. Pomocí objektu cerr vytiskněte chybu na konzole.
  5. Program musí po úspěšném provedení vrátit hodnotu.
  6. Konec těla hlavní funkce.

std::ucpání

Objekt clog je instancí třídy ostream. Používá se k zobrazení chyb na standardním displeji, monitoru. Je podobný objektu cerr, ale má vyrovnávací paměť. Protože je vyrovnávací paměť, ukládá chybovou zprávu do vyrovnávací paměti, dokud se vyrovnávací paměť nenaplní/nevyprázdní. Používá se společně s operátorem vkládání proudu (<<).

Příklad

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

Výstup:

std::ucpání

Zde je snímek obrazovky kódu:

std::ucpání

Code Vysvětlení:

  1. Včetně souboru záhlaví iostream, ve kterém je definován objekt clog.
  2. Včetně jmenného prostoru std, abychom mohli používat jeho třídy, aniž bychom ho volali.
  3. Volání funkce main(). Logika programu by měla být přidána do jeho těla. { označuje začátek těla funkce.
  4. Pomocí objektu clog vytiskněte chybu na standardní výstup, monitor.
  5. Program musí po úspěšném dokončení vrátit hodnotu.
  6. Konec těla funkce main().

Zpracování chyb s IO streamy

Stejné objekty streamu také hlásí, zda operace proběhla úspěšně, což odhalí kontroly stavu streamu.

Chcete-li zkontrolovat, zda je stream platný nebo ne, můžete jej použít jako logickou hodnotu.

Zde je příklad:

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

Chcete-li získat další podrobnosti o stavu streamu, můžete použít tyto funkce:

  • good()- vrátí true, pokud je vše v pořádku.
  • bad()- vrátí hodnotu true, pokud dojde k závažné chybě.
  • fail()- po neúspěšné operaci streamu vrátí hodnotu true.
  • eof()- vrátí true, pokud dosáhne konce souboru.

Chcete-li zjistit, zda se konkrétní operace čtení/zápisu nezdařila, otestujte výsledek čtení.

Chcete-li například zkontrolovat, zda uživatel zadal platné celé číslo, postupujte takto:

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

Nejčastější dotazy

Objekt cout je typově bezpečný a používá operátor vkládání, takže automaticky detekuje typ každé hodnoty. Funkce printf v jazyce C se spoléhá na specifikátory formátu, jako například %d, které musí argumenty porovnávat ručně.

Bývalý/átracOperátor tion se zastaví na první mezeře, takže cin přečte pouze jedno slovo. Chcete-li zachytit celý řádek s mezerami, zavolejte funkci getline(cin, variable), která přečte až po znak nového řádku.

Oba začínají nový řádek, ale endl také pokaždé vyprázdní výstupní vyrovnávací paměť, což může zpomalit rušné smyčky. Upřednostňujte prostý nový řádek a endl si rezervujte pro případ, kdy je nutné vyrovnávací paměť vyprázdnit okamžitě.

Objekty cin, cout, cerr a clog se nacházejí v jmenném prostoru std. Psaní s použitím jmenného prostoru std umožňuje zadat cout místo std::cout. Velké projekty často používají explicitní prefix std, aby se předešlo kolizím.

Zahrňte hlavičku iomanip a použijte manipulátory s funkcí cout. Manipulátor setw rezervuje šířku pole a setprecision nastavuje počet zobrazených číslic, formátuje čísla a sloupce bez změny uložených hodnot.

Ano. Protože cout a cerr jsou oddělené proudy, může shell přesměrovat normální výstup do souboru, i když se chyby stále zobrazují na obrazovce. V kódu může rdbuf nasměrovat proud do jiného bufferu.

Ano. Asistenti kódování s umělou inteligencí čtou komentář nebo název funkce a vytvářejí příkazy cin a cout, plus iostream include a formátovaný prompt. RevZobrazení generované logiky proudu pro okrajové případy zůstává moudré.

Ano. GitHub Copilot dokončuje formátování cout, ověřovací smyčky cin a kontroly chyb cerr během psaní. Je to 2026 C++ Inteligence kódu přidává povědomí o sémantických symbolech, takže návrhy pro více souborů zůstávají konzistentní.

Shrňte tento příspěvek takto: