C++ Основен вход/изход: пример Cout, Cin, Cerr

⚡ Умно обобщение

C++ Входните и изходните операции разчитат на поточни обекти, които преместват данни като байтови последователности между програми и устройства, като cin чете входни данни от клавиатурата, а cout, cerr и clog записват изход на екрана.

  • 🔘 Потоци: Входните и изходните задачи се предават като байтови последователности, наречени потоци, премествайки данни между основната памет и устройствата.
  • 📥 Заглавни файлове: Библиотеките iostream, iomanip и fstream дефинират обектите и манипулаторите, използвани за основен вход и изход.
  • 🖨️ cout и cin: Обектът cout отпечатва с оператора за вмъкване, докато cin чете стойности с оператора ex.tracоператор на ция.
  • ⚠️ cerr и запушване: И двата метода докладват за грешки, но cerr остава небуфериран за незабавно показване, докато clog първо буферира съобщенията.
  • 🛠️ Обработка на грешки: Проверките за добро, лошо, неуспешно и край на потока (eof) отчитат състоянието на потока, така че неуспешните операции се улавят безопасно.
  • 🤖 AI помощ: Асистенти за AI кодиране, като GitHub Copilot, генерират cin и cout шаблони от кратък коментар или име на функция.

C++ Основен вход/изход

В какво се намират потоци C++?

C++ предоставя на потребителите редица библиотеки, които могат да използват за изпълнение на входно/изходни задачи. Тези задачи се изпълняват под формата на поредици от байтове, популярно наричани потоци.

Потоците са разделени на две:

Видове потоци

  • Входящ поток: Това е вид поток, при който байтовете текат от устройство като клавиатура към основната памет.
  • Изходен поток: Това е вид поток, при който байтовете текат в обратна посока, т.е. от основната памет след това към устройството, като например екрана на дисплея.

Как работят потоците?

C++ потоците работят по следния начин:

  1. Първо, потокът се инициализира с правилния тип.
  2. След това трябва да посочите къде ще се извършват входно-изходните операции, използвайки указатели за get/put.
  3. След като стигнете до правилното място в поток, можете да изпълнявате входни и изходни задачи, като използвате съответно оператори >> и <<.

Функционална таблица

Следните функции са предоставени в заглавния файл stream.h:

класФункции
FilebufТой настройва файловите буфери за четене/запис. В него има функции close() и open().
fstreambaseТова е базовият клас за класовете ifstream, fstream и ofstream. Неговите операции са общи за файловите потоци.
ifstreamТова е клас на входен файлов поток за предоставяне на входни операции.
ofstreamТова е клас поток от изходни файлове за предоставяне на изходни операции.
fstreamТова е клас на входно/изходен поток. Поддържа едновременни операции за вход/изход.

C++ Заглавни файлове за вход/изход

C++ предоставя три библиотеки, които идват с функции за изпълнение на основни входно/изходни задачи. Те включват:

  • Iostream: Това е акроним за стандартен входно/изходен поток. Този заглавен файл идва с дефиниции за обекти като cin/ cout/cerr.
  • Йоманип: Това е акроним за входно/изходни манипулатори. Библиотеката идва с функции, които могат да се използват за манипулиране на потоци. Той съдържа дефиниции за обекти като setw, setprecision и други.
  • Fstream: Това е заглавен файл за описание на файловия поток. Той обработва данни, които се четат от файл като вход или които се записват във файл, изход.

Ключовите думи cin и cout са много популярни в C++. Те се използват съответно за приемане на входове и отпечатване на изходи. За да ги използвате, трябва да включите заглавния файл на iostream във вашата програма. Причината е, че те са дефинирани в този заглавен файл. Ако не включите заглавния файл на iostream, ще се генерира грешка. Това е резултат от повреда на C++ компилатор, за да разбере значението на ключовите думи.

Основните обекти, дефинирани в заглавния файл на iostream, са cin, cout, cerr и clog. Нека ги обсъдим.

std::out

Обектът cout е екземпляр на класа iostream. Използва се за създаване на изход на стандартно изходно устройство, което обикновено е екранът. Използва се заедно с оператора за вмъкване на поток (<<).

Пример

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

	char welcome[] = "Welcome to Guru99";

	cout << welcome << endl;

	return 0;
}

Изход:

std::out

Ето екранна снимка на кода:

std::out

Code Обяснение:

  1. Включете заглавния файл на iostream, където е дефиниран обектът cout.
  2. Включете пространството от имена std, така че да не се налага да го извикваме, когато използваме неговите класове.
  3. Извикайте функцията main(). Програмният код трябва да бъде добавен в тялото му. Отварящата фигурна скоба { маркира началото на тялото му.
  4. Създайте символна променлива с име „добре дошли“, която да съхранява низа „Добре дошли в“ Guru99.
  5. Отпечатайте стойността на низа за добре дошли на конзолата. Краят е a C++ ключова дума означава краен ред. Той премества курсора, за да започне отпечатването на текст на следващия ред.
  6. Програмата трябва да върне стойност при успешно изпълнение.
  7. Край на тялото на функцията main().

std::cin

Обектът cin е екземпляр на класа istream. Той чете входни данни от входното устройство, клавиатурата. Обикновено се използва заедно с ex.tracоператор на ция (>>). Изходниятtracобектът е отговорен за ексtracданни, въведени през клавиатурата от обекта cin.

Пример

Следващият пример демонстрира как да използвате ключовата дума cin в C++:

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

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

	return 0;
}

Изход:

std::cin

Ето екранна снимка на кода:

std::cin

Code Обяснение:

  1. Включете заглавния файл на iostream в нашата програма. Обектът cin е дефиниран в този заглавен файл.
  2. Включете пространството от имена std, за да използвате неговите класове. Няма да се налага да извиквате std, когато използвате неговите класове.
  3. Извикайте функцията main(). Програмният код трябва да бъде добавен в тялото му.
  4. Началото на тялото на програмата.
  5. Декларирайте ан цяло число променлива наименуван номер.
  6. Отпечатайте съобщение на екрана, подканващо потребителя да въведе номер.
  7. Прочетете въведената от потребителя стойност на конзолата от клавиатурата.
  8. Отпечатайте прочетената по-горе стойност на конзолата заедно с друг текст.
  9. Програмата трябва да върне стойност, ако се изпълни успешно.
  10. Край на тялото на основната функция.

std::cerr

Обектът cerr формира стандартния поток от грешки за извеждане на грешки C++. Cerr е екземпляр на класа ostream. Обектът cerr не е буфериран. Това означава, че се използва, когато съобщение за грешка трябва да се покаже незабавно.

Тъй като не е буфериран, той не съхранява съобщение за грешка за по-късен дисплей. Използва се заедно с оператора за вмъкване на поток (<<).

Пример

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

	cerr << "An Error occurred!";

	return 0;
}

Изход:

std::cerr

Ето екранна снимка на кода:

std::cerr

Code Обяснение:

  1. Включете заглавния файл на iostream, където е дефиниран обектът cerr.
  2. Включете пространството от имена std, така че да не се налага да го извикваме, когато използваме неговите класове.
  3. Извикайте функцията main(). Логиката на програмата трябва да бъде добавена в нейното тяло. Отварящата фигурна скоба маркира началото на тялото на функцията.
  4. Използвайте обекта cerr, за да отпечатате грешка на конзолата.
  5. Програмата трябва да върне стойност при успешно изпълнение.
  6. Край на тялото на основната функция.

std::запушване

Обектът clog е екземпляр на класа ostream. Използва се за показване на грешки на стандартния дисплей, монитора. Подобен е на обекта cerr, но е буфериран. Тъй като е буфериран, той съхранява съобщението за грешка в буфера, докато буферът се запълни/изчисти. Използва се заедно с оператора за вмъкване на поток (<<).

Пример

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

Изход:

std::запушване

Ето екранна снимка на кода:

std::запушване

Code Обяснение:

  1. Включително заглавния файл на iostream, в който е дефиниран обектът за запушване.
  2. Включително пространството от имена на std, така че да можем да използваме неговите класове, без да го извикваме.
  3. Извикване на функцията main(). Логиката на програмата трябва да бъде добавена в нейното тяло. { маркира началото на тялото на функцията.
  4. Използвайте обекта clog, за да отпечатате грешка на стандартния изход, монитора.
  5. Програмата трябва да върне стойност при успешно завършване.
  6. Краят на тялото на функцията main().

Обработка на грешки с IO потоци

Същите поточни обекти също така съобщават дали дадена операция е била успешна, което се разкрива от проверките на състоянието на потока.

За да проверите дали даден поток е валиден или не, можете да го използвате като булево.

Ето един пример:

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

За да получите повече подробности за състоянието на потока, можете да използвате тези функции:

  • good() - ще върне true, ако всичко е наред.
  • bad() - ще върне true, ако възникне фатална грешка.
  • fail() - ще върне true след неуспешна операция на потока.
  • eof()- ще върне true, ако достигне края на файл.

За да разберете дали дадена операция за четене/запис е неуспешна, тествайте резултата от четене.

Например, за да проверите дали потребителят е въвел валидно цяло число, направете следното:

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

Въпроси и Отговори

Обектът cout е безопасен по отношение на типа и използва оператора за вмъкване, така че автоматично разпознава типа на всяка стойност. Функцията printf на C разчита на спецификатори на формат, като например %d, които трябва да съпоставят аргументите ръчно.

БившиятtracОператорът tion спира на първия интервал, така че cin чете само една дума. За да запишете цял ред с интервали, извикайте getline(cin, variable), която чете до символа за нов ред.

И двата начина започват нов ред, но endl също така изчиства изходния буфер всеки път, което може да забави заетите цикли. Предпочитайте обикновен нов ред и резервирайте endl за случаите, когато буферът трябва да се изчисти незабавно.

Обектите cin, cout, cerr и clog се намират в пространството от имена std. Писането с помощта на пространството от имена std ви позволява да пишете cout, а не std::cout. Големите проекти често запазват изричния префикс std, за да избегнат сблъсъци.

Включете заглавката iomanip и използвайте манипулатори с cout. Манипулаторът setw резервира ширината на полето, а setprecision задава колко цифри ще се появят, форматирайки числата и колоните, без да променя съхранените стойности.

Да. Тъй като cout и cerr са отделни потоци, shell може да пренасочи нормален изход към файл, докато грешките все още достигат до екрана. В код, rdbuf може да насочи поток към друг буфер.

Да. Асистентите за кодиране с изкуствен интелект четат коментар или име на функция и генерират оператори cin и cout, плюс iostream include и форматиран подкаст. RevПрегледът на генерираната потокова логика за гранични случаи е разумно.

Да. Копилот на GitHub завършва форматирането на cout, циклите за валидиране на cin и проверките за грешки в cerr, докато пишете. Това е 2026 C++ Кодовата интелигентност добавя разпознаваемост на семантични символи, така че предложенията за множество файлове остават последователни.

Обобщете тази публикация с: