C++ Podstawowe wejście/wyjście: przykład Cout, Cin, Cerr

⚡ Inteligentne podsumowanie

C++ Operacje wejścia i wyjścia opierają się na obiektach strumieniowych, które przesyłają dane jako sekwencje bajtów między programami i urządzeniami, przy czym cin odczytuje dane wprowadzane z klawiatury, a cout, cerr i clog zapisują dane wyjściowe na ekranie.

  • 🔘 Strumienie: Zadania wejścia i wyjścia są przesyłane jako sekwencje bajtów zwane strumieniami, które przesyłają dane pomiędzy pamięcią główną i urządzeniami.
  • 📥 Pliki nagłówkowe: Biblioteki iostream, iomanip i fstream definiują obiekty i manipulatory służące do podstawowego wprowadzania i wyprowadzania danych.
  • 🖨️ cout i cin: Obiekt cout drukuje za pomocą operatora wstawiania, natomiast cin odczytuje wartości za pomocą operatora extracoperator cji.
  • ⚠️ cerr i clog: Oba zgłaszają błędy, jednak cerr pozostaje niebuforowany i można go natychmiast wyświetlić, podczas gdy bufory najpierw zatykają komunikaty.
  • 🛠️. Obsługa błędów: Sprawdzanie stanu strumienia za pomocą funkcji „dobry”, „zły”, „nieudany” i „koniec” pozwala na bezpieczne odczytanie stanu strumienia, dzięki czemu nieudane operacje są wychwytywane.
  • 🤖 Pomoc AI: Asystenci kodowania AI, tacy jak GitHub Copilot, generują szablony cin i cout na podstawie krótkiego komentarza lub nazwy funkcji.

C++ Podstawowe wejście i wyjście

W czym są strumienie C++?

C++ zapewnia użytkownikom szereg bibliotek, których mogą używać do wykonywania zadań wejścia/wyjścia. Zadania te realizowane są w formie sekwencji bajtów, popularnie zwanych strumieniami.

Strumienie dzielą się na dwa:

Rodzaje strumieni

  • Strumień wejściowy: Jest to rodzaj strumienia, w którym bajty przepływają z urządzenia takiego jak klawiatura do pamięci głównej.
  • Strumień wyjściowy: Jest to rodzaj strumienia, w którym bajty przepływają w przeciwnym kierunku, to znaczy z pamięci głównej, a następnie do urządzenia takiego jak ekran wyświetlacza.

Jak działają strumienie?

C++ strumienie działają w następujący sposób:

  1. Najpierw inicjowany jest strumień odpowiedniego typu.
  2. Następnie należy określić miejsce wykonania operacji wejścia/wyjścia, korzystając ze wskaźników get/put.
  3. Po dotarciu do właściwego miejsca w strumieniu możesz wykonywać zadania wejściowe i wyjściowe, odpowiednio za pomocą operatorów >> i <<.

Tabela funkcji

Poniżej przedstawiono funkcje zawarte w pliku nagłówkowym stream.h:

KlasaFunkcje
PlikbufUstawia bufory plików do odczytu/zapisu. Posiada funkcje close() i open()
baza fstreamJest to klasa bazowa dla klas ifstream, fstream i ofstream. Jej operacje są wspólne dla strumieni plików.
jeśli strumieńJest to klasa strumienia pliku wejściowego zapewniająca operacje wejściowe.
poza strumieniemJest to klasa strumienia pliku wyjściowego umożliwiająca wykonywanie operacji wyjściowych.
fstreamTo klasa strumienia wejścia/wyjścia. Obsługuje jednoczesne operacje wejścia/wyjścia.

C++ Pliki nagłówkowe dla wejścia/wyjścia

C++ udostępnia trzy biblioteki zawierające funkcje umożliwiające wykonywanie podstawowych zadań wejścia/wyjścia. Należą do nich:

  • Iostream: To skrót od standardowego strumienia wejścia/wyjścia. Ten plik nagłówkowy zawiera definicje obiektów takich jak cin/cout/cerr.
  • Jomanip: To skrót od manipulatorów wejścia/wyjścia. Biblioteka zawiera funkcje, które można wykorzystać do manipulacji strumieniami. Zawiera definicje obiektów takich jak setw, setprecision i inne.
  • Fstream: Jest to plik nagłówkowy opisujący strumień pliku. Obsługuje dane odczytywane z pliku jako dane wejściowe lub zapisywane do pliku jako dane wyjściowe.

Słowa kluczowe cin i cout są bardzo popularne w C++. Służą one odpowiednio do pobierania danych wejściowych i drukowania. Aby z nich skorzystać, musisz dołączyć plik nagłówkowy iostream do swojego programu. Powodem jest to, że są one zdefiniowane w tym pliku nagłówkowym. Niedołączenie pliku nagłówkowego iostream spowoduje wygenerowanie błędu. Jest to spowodowane porażką ze strony C++ kompilator, aby zrozumieć znaczenie słów kluczowych.

Główne obiekty zdefiniowane w pliku nagłówkowym iostream to cin, cout, cerr i clog. Omówmy je.

std::out

Obiekt cout jest instancją klasy iostream. Służy do generowania danych wyjściowych na standardowym urządzeniu wyjściowym, którym zwykle jest ekran. Jest używany razem z operatorem wstawiania strumienia (<<).

Przykład

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

	char welcome[] = "Welcome to Guru99";

	cout << welcome << endl;

	return 0;
}

Wyjście:

std::out

Oto zrzut ekranu kodu:

std::out

Code Wyjaśnienie:

  1. Dołącz plik nagłówkowy iostream, w którym zdefiniowany jest obiekt cout.
  2. Dołącz przestrzeń nazw std, abyśmy nie musieli jej wywoływać podczas korzystania z jej klas.
  3. Wywołaj funkcję main(). Kod programu należy dodać w jego treści. Otwierający nawias klamrowy { oznacza początek treści.
  4. Utwórz zmienną znakową o nazwie welcome, w której będzie przechowywany ciąg znaków Welcome to Guru99.
  5. Wydrukuj wartość ciągu powitalnego na konsoli. Koniec jest a C++ słowo kluczowe oznaczające linię końcową. Przesuwa kursor, aby rozpocząć drukowanie tekstu w następnej linii.
  6. Program musi zwrócić wartość po pomyślnym wykonaniu.
  7. Koniec treści funkcji main().

std::cin

Obiekt cin jest instancją klasy istream. Odczytuje dane wejściowe z urządzenia wejściowego, klawiatury. Zwykle jest używany razem z obiektem ex.tracoperator cji (>>).tracobiekt tion jest odpowiedzialny za np.tracwprowadzanie danych za pomocą klawiatury z obiektu cin.

Przykład

Poniższy przykład pokazuje, jak używać słowa kluczowego cin w C++:

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

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

	return 0;
}

Wyjście:

std::cin

Oto zrzut ekranu kodu:

std::cin

Code Wyjaśnienie:

  1. Dołącz plik nagłówkowy iostream do naszego programu. Obiekt cin jest zdefiniowany w tym pliku nagłówkowym.
  2. Dołącz przestrzeń nazw std, aby użyć jej klas. Nie będziesz musiał wywoływać std podczas korzystania z jego klas.
  3. Wywołaj funkcję main(). Kod programu należy dodać w jego treści.
  4. Początek treści programu.
  5. Zadeklaruj zmienna całkowita nazwany numer.
  6. Wydrukuj na ekranie komunikat proszący użytkownika o wprowadzenie numeru.
  7. Odczytaj z klawiatury wartość wprowadzoną przez użytkownika na konsoli.
  8. Wydrukuj wartość przeczytaną powyżej na konsoli wraz z innym tekstem.
  9. Program powinien zwrócić wartość, jeśli zostanie pomyślnie wykonany.
  10. Koniec ciała funkcji głównej.

std::cerr

Obiekt cerr tworzy standardowy strumień błędów do wysyłania błędów C++. Cerr jest instancją klasy ostream. Obiekt cerr jest niebuforowany. Oznacza to, że jest używany, gdy komunikat o błędzie ma zostać wyświetlony natychmiast.

Ponieważ nie jest buforowany, nie przechowuje komunikatu o błędzie do późniejszego wyświetlenia. Jest używany razem z operatorem wstawiania strumienia (<<).

Przykład

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

	cerr << "An Error occurred!";

	return 0;
}

Wyjście:

std::cerr

Oto zrzut ekranu kodu:

std::cerr

Code Wyjaśnienie:

  1. Dołącz plik nagłówkowy iostream, w którym zdefiniowano obiekt cerr.
  2. Dołącz przestrzeń nazw std, abyśmy nie musieli jej wywoływać podczas korzystania z jej klas.
  3. Wywołaj funkcję main(). Logikę programu należy dodać w jego treści. Otwierający nawias klamrowy wyznacza początek treści funkcji.
  4. Użyj obiektu cerr, aby wydrukować błąd na konsoli.
  5. Program musi zwrócić wartość po pomyślnym wykonaniu.
  6. Koniec ciała funkcji głównej.

std::zatkać

Obiekt clog jest instancją klasy ostream. Służy do wyświetlania błędów na standardowym wyświetlaczu, monitorze. Jest podobny do obiektu cerr, ale jest buforowany. Ponieważ jest buforowany, przechowuje komunikat o błędzie w buforze, dopóki bufor nie zostanie wypełniony/opróżniony. Jest używany razem z operatorem wstawiania strumienia (<<).

Przykład

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

Wyjście:

std::zatkać

Oto zrzut ekranu kodu:

std::zatkać

Code Wyjaśnienie:

  1. Łącznie z plikiem nagłówkowym iostream, w którym zdefiniowany jest obiekt zatykający.
  2. Dołączamy przestrzeń nazw std, abyśmy mogli używać jej klas bez wywoływania jej.
  3. Wywołanie funkcji main(). Logikę programu należy dodać w jego treści. { oznacza początek treści funkcji.
  4. Użyj obiektu clog, aby wydrukować błąd na standardowym wyjściu, monitorze.
  5. Program musi zwrócić wartość po pomyślnym zakończeniu.
  6. Koniec treści funkcji main().

Obsługa błędów w strumieniach IO

Te same obiekty strumienia raportują również, czy operacja zakończyła się powodzeniem, co ujawniają kontrole stanu strumienia.

Aby sprawdzić, czy strumień jest prawidłowy, czy nie, możesz użyć go jako wartości logicznej.

Oto przykład:

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

Aby uzyskać więcej szczegółów na temat statusu strumienia, możesz użyć następujących funkcji:

  • good() - zwróci wartość true, jeśli wszystko jest w porządku.
  • bad() - zwróci wartość true, jeśli wystąpi błąd krytyczny.
  • fail() — zwróci wartość true w przypadku nieudanej operacji strumieniowej.
  • eof() - zwróci wartość true, jeśli dotrze do końca pliku.

Aby dowiedzieć się, czy konkretna operacja odczytu/zapisu nie powiodła się, należy sprawdzić wynik odczytu.

Na przykład, aby sprawdzić, czy użytkownik wprowadził prawidłową liczbę całkowitą, wykonaj następujące czynności:

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

FAQ

Obiekt cout jest bezpieczny pod względem typu i używa operatora wstawiania, dzięki czemu automatycznie wykrywa typ każdej wartości. Funkcja printf w języku C opiera się na specyfikatorach formatu, takich jak %d, które muszą ręcznie dopasować argumenty.

ByłytracOperator cji zatrzymuje się na pierwszej spacji, więc cin odczytuje tylko jedno słowo. Aby przechwycić cały wiersz ze spacjami, wywołaj getline(cin, zmienna), która odczytuje do znaku nowej linii.

Oba polecenia rozpoczynają nowy wiersz, ale endl za każdym razem opróżnia bufor wyjściowy, co może spowalniać zajęte pętle. Preferuj zwykły znak nowej linii i zarezerwuj endl na sytuacje, gdy bufor musi zostać opróżniony natychmiast.

Obiekty cin, cout, cerr i clog znajdują się w przestrzeni nazw std. Zapis z użyciem przestrzeni nazw std pozwala na wpisanie cout zamiast std::cout. Duże projekty często zachowują jawny prefiks std, aby uniknąć kolizji.

Dołącz nagłówek iomanip i użyj manipulatorów z cout. Manipulator setw rezerwuje szerokość pola, a setprecision ustawia liczbę wyświetlanych cyfr, formatując liczby i kolumny bez zmiany przechowywanych wartości.

Tak. Ponieważ cout i cerr to oddzielne strumienie, powłoka może przekierować normalne wyjście do pliku, podczas gdy błędy nadal będą pojawiać się na ekranie. W kodzie rdbuf może wskazać strumień na inny bufor.

Tak. Asystenci kodowania AI odczytują komentarz lub nazwę funkcji i generują polecenia cin i cout, a także polecenie iostream include i sformatowany monit. Revprzeglądanie generowanej logiki strumienia pod kątem przypadków brzegowych pozostaje mądrym posunięciem.

Tak. Drugi pilot GitHub Wykonuje formatowanie cout, pętle walidacji cin i sprawdza błędy cerr podczas pisania. Jest 2026 C++ inteligencja kodu dodaje świadomość symboli semantycznych, więc sugestie dotyczące wielu plików pozostają spójne.

Podsumuj ten post następująco: