Перейти к содержимому

Cerr c что это

  • автор:

Cerr c что это

блин собственно обыскался уже . может не там искал ,хз . но может кто нибудь подскажет в чем различие между cerr и cout ?
и то и то выводят сообщения на экран.

Форумчанин
Регистрация: 05.09.2011
Сообщений: 869

cout — это нормальный обычный вывод. Используй его для вывода сообщений в штатных ситуациях.

cerr — это сообщения об ошибках. Если ситуация нештатная — пиши сюда диагностические сообщения.

Когда запускаешь откомпилированную программу, можешь сделать так:

> myprog > normaloutput 2> errors

— после этого на экране ничего не появится, но обычный вывод будет сохранен в файле normaloutput, а сообщения об ошибках — в файле errors.

Предпочитаю на «ты».

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
‘cout’ : undeclared identifier Alt_Shift Помощь студентам 10 15.04.2011 07:54
cerr в линукс убунточка veter_s_morya Общие вопросы C/C++ 1 02.10.2010 14:43
Вопрос по cout (С++) EniOk Помощь студентам 2 06.12.2009 15:32
cout: необъявленный идентификатор alone_guy Общие вопросы C/C++ 1 13.02.2009 13:44
error C2065: ‘cout’ Даврон Общие вопросы C/C++ 9 24.12.2008 16:16

Cerr – обработка ошибок в C++

Эта статья пытается пролить некоторый свет на (часто игнорируемый) объект cerr в C++. ‘C’ в Сerr означает “символ” и “err” означает “ошибка”, значит Cerr означает “Ошибка символа”.

Он определен в заголовочном файле iostream и соответствует потоку C stderr. Он имеет очень похожее использование на объект cout (т. е. печать символов на консоли во время выполнения) под потоком stdout.

Различие

Даже при том, что результат обоих cout и cerr одинаков, есть очень тонкое различие между ними, которое мы можем найти в случае использования вышеупомянутых обоих потоков.

Вот пример кода, чтобы показать разницу между ними:

#include using namespace std; int main()

Оба приведенных выше оператора будут печатать символы, но под разными консолями / контекстом. Взгляните на результат.

Hey there, Geek! :: cout
Hey there, Geek! :: cerr

Итак, что же можно извлечь из их использования?

Как правило, stdout:: cout должен использоваться для фактического вывода программы, в то время как вся информация и сообщения об ошибках должны быть напечатаны в stderr::cerr.

Например: предположим, что пользователь хочет открыть файл и перенаправить вывод на этот внешний файл. Предположим, что во время выполнения программы (из-за какой-то проблемы) открытие файла выдает ошибку. Чтобы сохранить проверку таких ошибок, разработчик должен зарегистрировать ошибку где-то, чтобы проверить ее позже. Он может использовать cerr, так как эта ошибка все еще печатается, не будучи выходом на консоль или выходной файл.

Давайте посмотрим примерную программу для этого:

#include #include using namespace std; int main() < char fileName[] = "data.txt"; // Открытие файла с помощью объекта infile класса ifstream в заголовочном файле fstream ifstream infile(fileName); // Если файл существует, начните чтение с файла if(infile) cout << infile.rdbuf(); /* Если возникает какая-либо проблема, это сообщение отображается как ошибка. Таким образом, пользователь может четко различать между подлинным выводом и ошибками в своем коде. еще */ cerr

Понравилось то, что вы прочитали?

Подписывайтесь на нашу рассылку и получайте ежедневные обновления о новых учебниках, статьях, курсах и о многом другом!

Просто введите ваш адрес электронной почты, чтобы подписаться.

(Без спамов; ежемесячно два письма; отписаться от рассылки можно в любое время)

Спасибо!

Подписка успешно оформлена. ��

cerr

Author24 — интернет-сервис помощи студентам

объясните пожалуйста что делает cerr?
cerr — объект класса ostream, который представляет стандартный ошибочный поток.

что значит ошибочный поток?

* Используя выходной поток cerr, ваши программы могут посылать сообщения на стандартное устройство ошибок, избавляя пользователей от необходимости переназначения сообщений.

это я тоже не совсем понял..можете объяснить или пример превести, а лучше то и другое)

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

cerr
Объясните почему используют std::cerr для вывода ошибок,а не обычный std::cout к примеру?

exception и cerr
Страуструп пишет ". Если мы не перехватим исключение, связанное с выходом за границу .

Cerr и clog
У меня собственно бональнвй вопрос.. Перелопатил гугл, но так и не дошло 🙁 Объясните простому.

Операторы Cerr, Clog
Помогите пожалуйста разобраться. Я уже довольно долгр прогрммирую на C++, но с операторами cerr и.

2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
Например, есть bat файл со всякой фигнёй, полезный вывод перенаправляется в какой-то файл:

qq.exe >1.txt ww.exe >>1.txt .

Но в таком случае может быть удобно, чтобы сообщения об ошибках не писались в файл, а выводились на консоль. Если их выводить в поток ошибок, по умолчанию так и есть.
Поток ошибок при необходимости перенаправляется отдельно

rem В другой файл qq.exe >1.txt 2>err.txt rem В тот же qq.exe >1.txt 2>&1

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Перенаправление std::cerr
Всем доброго времени суток! Возможно вопрос очень простой, но вразумительного ответа найти не.

Что и в каких случаях лучше использовать: cerr, clog, cout ?
Доброго времени суток! Подскажите пожалуйста, когда лучше использовать cerr, clog, cout? При.

Поясните: cerr Приветствую всех, необходима ваша помощь: В разрабатываемой программе одни из пунктов, которые.

Или воспользуйтесь поиском по форуму:

Что такое «cerr» и «stderr»?

В чем разница между ними и как они используются? Кто-нибудь может привести меня к примерам?

Конкретно, как вы «записываете» в поток в обоих случаях и как восстанавливаете и выводят (т.е. на экран) текст, который был написан в него?

Также, «экранный» вывод сам по себе является потоком? Может быть, я плохо понимаю потоки. Это также можно сохранить в файл, конечно, я знаю. Будет ли все это использовать fprintf / fscanf и т.д.?

Поделиться Источник 08 июля 2010 в 01:32

2 ответа

cerr — это поток C++, а stderr — это файл C, оба представляют стандартный вывод ошибок.

Вы пишете им то же самое, что вы пишете в другие потоки и файловые дескрипторы:

cerr  

Я не уверен, что вы имеете в виду под "восстановлением" в этом контексте, вывод переходит к стандартной ошибке, и все. Программа не должна заботиться о ней после этого. Если вы имеете в виду, как сохранить ее для последующих действий, извне программы, см. следующий абзац.

По умолчанию они будут перенаправлены в ваш терминал, но вывод можно перенаправить в другое место с помощью чего-то вроде:

run_my_prog 2>error.out 

И, да, вывод "экрана" является потоком (или файловой обработкой), но это обычно происходит только потому, что stdout/cout и stderr/cerr по умолчанию подключены к вашему "экрану". Перенаправление повлияет на это, как в следующем случае, когда ничего не будет записано на ваш экран:

run_my_prog >/dev/null 2>&1 

(несмотря на сложные вещи, такие как запись напрямую в /dev/tty ). Этот фрагмент перенаправит как стандартный вывод, так и стандартную ошибку, чтобы перейти в битовый сегмент.

Поделиться 08 июля 2010 в 01:37

stderr - это FILE* , и часть стандартной библиотеки C. cerr - это ostream и часть стандартной библиотеки C++.

Также, вывод "экрана" сам по себе является правильным потоком?

Да, это так. Но на самом деле есть два потока, которые записывают на экран по умолчанию: stdout / cout - это для обычного вывода, а stderr / cerr - для сообщений об ошибках. Это полезно для перенаправления: Вы можете перенаправить stdout на файл, но все еще имеете свои сообщения об ошибках на экране.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *