Разное

Cout cin библиотека: Поточный ввод-вывод в C++ : функции cin, cout, cerr

Содержание

Библиотека для cout в c

  • atomic (C++11)
  • condition_variable (C++11)
  • future (C++11)
  • mutex (C++11)
  • shared_mutex (C++14)
  • thread (C++11)
  • cassert
  • cctype
  • cerrno
  • cfenv (C++11)
  • cfloat
  • cinttypes (C++11)
  • ciso646
  • climits
  • clocale
  • cmath
  • csetjmp
  • csignal
  • cstdarg
  • cstdbool (C++11)
  • cstddef
  • cstdint (C++11)
  • cstdio
  • cstdlib
  • cstring
  • ctgmath (C++11)
  • ctime
  • cuchar (C++11)
  • cwchar
  • cwctype

iostream — заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C++. Он включён в стандартную библиотеку C++. Название образовано от Input/Output Stream («поток ввода-вывода»). В языке C++ и его предшественнике, языке программирования Си, нет встроенной поддержки ввода-вывода, вместо этого используется библиотека функций. iostream управляет вводом-выводом, как и stdio.h в Си. iostream использует объекты cin, cout, cerr и clog для передачи информации и из стандартных потоков ввода, вывода, ошибок (без буферизации) и ошибок (с буферизацией) соответственно. Являясь частью стандартной библиотеки C++, эти объекты также являются частью стандартного пространства имён — std.

Некоторые новые компиляторы (например, компилятор Visual C++ из Visual Studio .NET 2003 [1] ) старые библиотеки больше не поддерживают, вместо них нужно использовать только новые: #include .

Содержание

Пример [ править | править код ]

Простейшая программа «Hello, world!» (с использованием библиотеки iostream) может быть записана так:

Форматирование вывода [ править | править код ]

Функции [ править | править код ]

width(int x)минимальное число знаков до следующего вывода
fill(char x)устанавливает символ-заполнитель и возвращает предыдущий символ-заполнитель. По умолчанию в качестве символа-заполнителя используется пробел
precision(int x)устанавливает число значащих знаков для чисел с плавающей точкой

Манипуляторы [ править | править код ]

Стандартная библиотека предлагает большое количество манипуляторов, среди них:

В С++, как и в С, нет встроенных в язык средств ввода-вывода.

В С для этих целей используется библиотека stdio.h .
В С++ разработана новая библиотека ввода-вывода iostream , использующая концепцию объектно-ориентированного программирования:

Библиотека iostream определяет три стандартных потока:

  • cin стандартный входной поток ( stdin в С)
  • cout стандартный выходной поток ( stdout в С)
  • cerr стандартный поток вывода сообщений об ошибках ( stderr в С)

Для их использования в Microsoft Visual Studio необходимо прописать строку:

Для выполнения операций ввода-вывода переопределены две операции поразрядного сдвига:

  • >> получить из входного потока
  • cout

Возможно многократное назначение потоков:
cout

Ввод информации

При этом из входного потока читается последовательность символов до пробела, затем эта последовательность преобразуется к типу идентификатора, и получаемое значение помещается в идентификатор:

Возможно многократное назначение потоков:
cin >> переменная1 >> переменная2 >>. >> переменнаяn;

При наборе данных на клавиатуре значения для такого оператора должны быть разделены символами (пробел,
, ).

Особого внимания заслуживает ввод символьных строк. По умолчанию потоковый ввод cin вводит строку до пробела, символа табуляции или перевода строки.

Результат выполнения

Для ввода текста до символа перевода строки используется манипулятор потока getline() :

Результат выполнения

Манипуляторы потока

Функцию – манипулятор потока можно включать в операции помещения в поток и извлечения из потока ( >).

В С++ имеется ряд манипуляторов. Рассмотрим основные:

МанипуляторОписание
endlПомещение в выходной поток символа конца строки ‘
decУстановка основания 10-ой системы счисления
octУстановка основания 8-ой системы счисления
hexУстановка основания 16-ой системы счисления
setbaseВывод базовой системы счисления
width(ширина)Устанавливает ширину поля вывода
fill(‘символ’)Заполняет пустые знакоместа значением символа
precision(точность)Устанавливает количество значащих цифр в числе (или после запятой) в зависимости от использования fixed
fixedПоказывает, что установленная точность относится к количеству знаков после запятой
showposПоказывает знак + для положительных чисел
scientificВыводит число в экспоненциальной форме
get()Ожидает ввода символа
getline(указатель, количество)Ожидает ввода строки символов. Максимальное количество символов ограничено полем количество

Пример Программа ввода-вывода значения переменной в C++

Та же программа, написанная на языке Си

Пример Использование форматированного вывода

Результат выполнения

Еще один пример использования форматированного вывода: для t∈[0;3] с шагом 0,5 вычислить значение y=cos(t).

Результат выполнения

Приложение, написанное на любом языке программирования, должно взаимодействовать с окружающим миром. Иначе пользы от него не будет. Как правило, такое взаимодействие осуществляется посредством ввода-вывода информации на монитор или в файл. Правда, есть некоторое множество программ, которые не используют файловый или консольный ввод-вывод: это программы, осуществляющие низкоуровневое взаимодействие с аппаратной частью компьютера и периферией (ядро ОС, драйверы и пр.), но это уже экзотика.

В стандартном C++ существует два основных пути ввода-вывода информации: с помощью потоков, реализованных в STL (Standard Template Library) и посредством традиционной системы ввода-вывода, унаследованной от C. Если копнуть немного глубже, то окажется, что и потоки, и традиционная система ввода-вывода для осуществления необходимых действий используют вызовы операционной системы. И это правильно.

Дальнейшее изложение не претендует на полноту, но описывает основные принципы использования библиотек. Подробности использования можно посмотреть в многочисленной литературе по C++ и STL, в MSDN и пр.

Традиционный ввод-вывод

Для использования традиционного ввода-вывода в духе C, в программу необходимо включить заголовочный файл . (Разумеется, компилятор должен иметь доступ к соответствующей объектной библиотеке для правильной сборки исполняемого файла.)

Библиотека stdio предоставляет необходимый набор функций для ввода и вывода информации как в текстовом, так и в двоичном представлении. Следует отметить, что в отличие от классической C‑библиотеки, в современных библиотеках имеются более безопасные аналоги «классических» функций. Как правило, они имеют такое же имя, к которому добавлен суффикс _s. Рекомендуется использовать именно эти, безопасные функции.

Самая Первая Программа с использованием библиотеки stdio выглядит так:

При запуске консольного приложения неявно открываются три потока: stdin — для ввода с клавиатуры, stdout — для буферизованного вывода на монитор и stderr — для небуферизованного вывода на монитор сообщений об ошибках. Эти три символа определены посредством .

В stdio для консольного ввода-вывода предусмотрена отдельная группа функций. Однако эти функции, как правило, являются обёртками для аналогичных функций файлового ввода-вывода, для которых аргумент типа FILE задан по умолчанию.

Самая Первая Программа с использование файлового вывода из библиотеки stdio выглядит так:

Некоторые популярные функции из stdio:

Сущность FILE представляет собой структуру, в которой хранится вся информация для управления потоком ввода-вывода.

Файл открывается функцией fopen(), которой передаются два параметра. Первый параметр определяет имя файла. Второй — определяет режим открытия файла: чтение, запись, произвольный доступ и т.п., а также указание на то, как работать с данными: в текстовом или двоичном режиме. Подробности — см. в документации.

Пример использования

stdio

Следует отметить, что существует еще одна библиотека, ориентированная исключительно на консольный ввод-вывод — .

Ввод-вывод с помощью потоков STL

Для использования объектно-ориентированного консольного ввода-вывода с помощью потоков (stream) STL в программу необходимо включить заголовочный файл , а для файлового ещё и . (Разумеется, компилятор должен иметь доступ к соответствующей объектной библиотеке для правильной сборки исполняемого файла.)

Самая Первая Программа с использованием потоков STL выглядит так:

При запуске консольного приложения неявно открываются четыре потока: сin — для ввода с клавиатуры, сout — для буферизованного вывода на монитор, сerr — для небуферизованного вывода на монитор сообщений об ошибках и clog — буферизованный аналог cerr. Эти четыре символа определены посредством .

Потоки cin, cout и cerr соответствуют потокам stdin, stdout и stderr соответственно.

Иерархия классов ввода-вывода STL достаточно сложна. Любители тонких ощущений могут найти её описание в литературе. Впрочем, остальных также не минует чаша сия, но только позже, когда потребуются знания чуть повыше того базового уровня, который описывается здесь.

Для ввода-вывода сначала необходимо создать поток — экземпляр соответствующего класса STL, а затем связать его с файлом. Для потока вывода используется класс ofstream, для потока ввода — ifstream, для потока ввода-вывода — fstream. В каждом из этих классов есть метод open(), который связывает поток с файлом. Проще говоря, открывает файл. Методу передаются два параметра: имя файла и режим открытия файла. Второй параметр представляет собой набор битовых флагов, определяющих режим открытия файла (чтение, запись и пр.) и способ работы с данными (текстовый или двоичный режим). Второй параметр опционален, т.е. имеет значение по умолчанию, соответствующее классу.

Вышеупомянутые классы имеют также конструкторы, позволяющие открыть файл сразу при создании потока. Параметры этих конструкторов полностью совпадают с параметрами метода open().

При ошибке открытия файла (в контексте логического выражения) поток получает значение false.

Файл закрывается методом close(). Этот метод также вызывается при разрушении экземпляров классов потоков.

Операции чтения и записи в поток, связанный с файлом, осуществляются либо с помощью операторов >, перегруженных для классов потоков ввода-вывода, либо с помощью любых других методов классов потоков ввода-вывода.

Некоторые наиболее употребляемые методы:

Пример использования потоков STL

Взаимодействие потокового и традиционного ввода-вывода

Апологеты C++ рекомендуют использовать для ввода-вывода только потоки STL и отказаться от использования традиционного ввода-вывода в духе C. Однако, ничто не мешает, по крайней мере пока, использовать традиционную систему ввода-вывода. Более того, предусмотрена специальная функция для синхронизации ввода-вывода, выполненного посредством потоков и посредством старых функций.

Заключение

Какой механизм использовать — вопрос предпочтений программиста, если работодателем явно не предписано использование конкретного механизма. В любом случае для физического ввода-вывода используются вызовы операционной системы. Всё остальное — обёртка, набор более или менее удобных функций или классов для взаимодействия с ОС.

Использование механизма потоков считается более безопасным. Но, как известно, плохую программу можно написать на любом языке программирования. Это также относится и к использованию библиотек. Автор статьи: Череп.

Ввод и вывод в консоли

Ввод и вывод в консоли

Последнее обновление: 14.09.2017

По умолчанию язык C++ не содержит встроенных средств для ввода с консоли и вывода на консоль, эти средства предоставляются библиотекой
iostream. В ней определены два типа: istream и ostream. istream представляет
поток ввода, а ostream — поток вывода.

Вобще сам темин «поток» в данном случае представляет последовательность символов, которая записывается на устройство ввода-вывода или считывается с него.
И в данном случае под устройством ввода-вывода рассматривается консоль.

Для записи или вывода символов на консоль применяется объект cout, который представляет тип ostream. А для чтения с консоли
используется объект cin

Для использования этих объектов в начало исходного файла необходимо подключить библиотеку iostream:

#include <iostream>

Вывод на консоль

Для вывода на консоль применяется оператор <<. Этот оператор получает два операнда. Левый операнд представляет
объект типа ostream, в данном случае объект cout. А правый операнд — значение, которое надо вывести на консоль.

Так как оператор << возвращает левый операнд — cout, то с помощью цепочки операторов мы можем передать на консоль несколько значений.
Например, определим простейшую программу вывода на консоль:


#include <iostream>

int main()
{	
	int age = 33;
	double weight = 81.23;
	std::cout << "Name: " << "Tom" << "\n";
	std::cout << "Age: " << age << std::endl;
	std::cout << "Weight: " << weight << std::endl;
	return 0;
}

Консольный вывод программы:


Name: Tom
Age: 33
Weight: 81.23

Оператору << передаются различные значения — строки, значения переменных, которые выводятся на консоль.

Строки могут содержать управляющие последовательности, которые интерпретируются определенным образом. Например, последовательность
«\n» интерпретируется как перевод на новую строку. Из других управляющих последовательностей также нередко употребляется «\t», которая интерпретируется
как табуляция.

Также цепочку операторов << можно завершать значением std::endl, которое вызывает перевод на новую строку и
сброс буфера. При выводе в поток данные вначале помещаются в буфер. И сброс буфера гарантирует, что все переданные для вывода на консоль данные
немедлено будут выведены на консоль.

Ввод с консоли

Для считывания с консоли данных применяется оператор ввода >>, который принимает два операнда. Левый операнд представляет
объект типа istream (в данном случае объект cin), с которого производится считывание, а правый операнд — объект, в который считываются данные.

Например, считаем данные с консоли:


#include <iostream>

int main()
{	
	int age;
	double weight;
	std::cout << "Input age: ";
	std::cin >> age;
	std::cout << "Input weight: ";
	std::cin >> weight;
	std::cout << "Your age: " << age << "\t your weight: " << weight << std::endl;
	return 0;
}

Здесь после приглашений к вводу программа ожидает ввода значений для переменных age и weight.

Пример работы программы:


Input age: 32
Input weight: 67.45
Your age: 32	your weight: 67.45

Стоит отметить, что так оператор ввода в первом случае будет добавлять данные в целочисленную переменную age, то он ожидает ввода числа. В случае с
переменной weight оператор ввода ожидает дробное число, причем разделителем целой и дробной части должна быть точка. Поэтому мы не можем ввести любые значения, например, строки.
В этом случае программа может выдать некорректный результат.

Оператор ввода >> возвращает левый операнд — объект cin, поэтому мы можем по цепочке считывать данные в различные переменные:


#include <iostream>

int main()
{	
	int age;
	double weight;
	std::cout << "Input age: ";
	std::cin >> age >> weight;
	std::cout << "Your age: " << age << "\t your weight: " << weight << std::endl;
	return 0;
}

Пример работы программы:


Input age: 32 67.45
Your age: 32	your weight: 67.45

После ввода одного из значений надо будет ввести пробел и затем вводить следующее значение.

C ++ — Базовый ввод/вывод

Стандартные библиотеки C ++ предоставляют расширенный набор возможностей ввода / вывода, которые мы увидим в последующих главах. В этой главе будут рассмотрены основные и наиболее распространенные операции ввода-вывода, необходимые для программирования на C ++.

C ++ I / O происходит в потоках, которые представляют собой последовательности байтов. Если байты поступают с устройства, такого как клавиатура, дисковод или сетевое соединение и т. д. В основную память, это называется операцией ввода, и если байты поступают из основной памяти в устройство, такое как экран дисплея, принтер, дисковод , или сетевое соединение и т. д., это называется операцией вывода .

Файлы заголовков библиотеки ввода-вывода

Для программ на C ++ важны следующие файлы заголовков —

<Iostream>

Этот файл определяет объекты cin, cout, cerr и clog , которые соответствуют стандартным входным потокам, стандартным потокам вывода, потоку стандартной буферизации без буферизации и потоку стандартной буферизации, соответственно.

<Iomanip>

Этот файл объявляет услуги , полезные для выполнения отформатированного ввода / вывода с помощью так называемым параметризованным потоком манипуляторами, такие как setw и setprecision .

<Fstream>

Этот файл объявляет службы для обработки файлов, управляемых пользователем. Мы обсудим это подробно в главе «Файл и поток».

Стандартный выходной поток (cout)

Предопределенный объект cout является экземпляром класса ostream . Сообщается, что объект cout «подключен к» стандартным устройствам вывода, который обычно является экраном дисплея. СоиЬ используется в сочетании с оператором вставки потока, который записывается в виде << которые являются два меньше , чем знаки , как показано в следующем примере.


#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Hello C++";
 
   cout << "Value of str is : " << str << endl;
}

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


Value of str is : Hello C++

Компилятор C ++ также определяет тип данных переменной, подлежащей выводу, и выбирает соответствующий оператор вставки потока для отображения значения. Оператор << перегружен для вывода элементов данных встроенных типов integer, float, double, string и значений указателя.

Оператор ввода << может использоваться более одного раза в одном выражении, как показано выше, и endl используется для добавления новой строки в конце строки.

Стандартный входной поток (cin)

Предопределенный объект cin является экземпляром класса istream . Говорят, что объект cin прикреплен к стандартным устройствам ввода, которые обычно являются клавиатурой. CIN используется в сочетании с оператором экстракции потока, который записывается как >> , которые являются два больше , чем знаки , как показано в следующем примере.


#include <iostream>
 
using namespace std;
 
int main() {
   char name[50];
 
   cout << "Please enter your name: ";
   cin >> name;
   cout << "Your name is: " << name << endl;
 
}

Когда вышеуказанный код скомпилирован и выполнен, он предложит вам ввести имя. Вы вводите значение, а затем нажмите Enter, чтобы увидеть следующий результат —


Please enter your name: cplusplus
Your name is: cplusplus

Компилятор C ++ также определяет тип данных введенного значения и выбирает соответствующий оператор извлечения потока для извлечения значения и сохранения его в данных переменных.

Оператор извлечения потока >> может использоваться более одного раза в одном выражении. Чтобы запросить более одного элемента данных, вы можете использовать следующее:


cin >> name >> age;

Это будет эквивалентно следующим двум утверждениям:


cin >> name;
cin >> age;

Стандартный поток ошибок (cerr)

Предопределенный объект cerr является экземпляром класса ostream . Говорят, что объект cerr прикреплен к стандартным устройству ошибок, которое также является экраном дисплея, но объект cerr не забуферирован, и каждая вставка потока в cerr вызывает немедленный вывод его вывода.

Сегг также используется в сочетании с оператором вставки потока , как показано в следующем примере.


#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Unable to read....";
 
   cerr << "Error message : " << str << endl;
}

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


Error message : Unable to read....

Стандартный поток журнала (засорение)

Предопределенный объект clog является экземпляром класса ostream . Объект clog, как говорят, прикреплен к стандартному устройству ошибок, который также является экраном дисплея, но затвор объекта буферизуется. Это означает, что каждая вставка для блокировки может привести к тому, что ее вывод будет удерживаться в буфере до заполнения буфера или до тех пор, пока буфер не будет сброшен.

Засорить также используется в сочетании с оператором вставки потока , как показано в следующем примере.


#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Unable to read....";
 
   clog << "Error message : " << str << endl;
}

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


Error message : Unable to read....

Вы не сможете увидеть какие-либо различия в cout, cerr и clog с этими небольшими примерами, но при написании и выполнении больших программ разница становится очевидной. Поэтому хорошей практикой является отображение сообщений об ошибках с использованием потока cerr и при отображении других сообщений журнала, которые следует использовать.

c cout форматированный вывод | Все о Windows 10

На чтение 5 мин. Просмотров 22 Опубликовано

В С++, как и в С, нет встроенных в язык средств ввода-вывода.

В С для этих целей используется библиотека stdio.h .
В С++ разработана новая библиотека ввода-вывода iostream , использующая концепцию объектно-ориентированного программирования:

Библиотека iostream определяет три стандартных потока:

  • cin стандартный входной поток ( stdin в С)
  • cout стандартный выходной поток ( stdout в С)
  • cerr стандартный поток вывода сообщений об ошибках ( stderr в С)

Для их использования в Microsoft Visual Studio необходимо прописать строку:

Для выполнения операций ввода-вывода переопределены две операции поразрядного сдвига:

  • >> получить из входного потока
  • cout

Возможно многократное назначение потоков:
cout

Ввод информации

При этом из входного потока читается последовательность символов до пробела, затем эта последовательность преобразуется к типу идентификатора, и получаемое значение помещается в идентификатор:

Возможно многократное назначение потоков:
cin >> переменная1 >> переменная2 >>. >> переменнаяn;

При наборе данных на клавиатуре значения для такого оператора должны быть разделены символами (пробел,
, ).

Особого внимания заслуживает ввод символьных строк. По умолчанию потоковый ввод cin вводит строку до пробела, символа табуляции или перевода строки.

Результат выполнения

Для ввода текста до символа перевода строки используется манипулятор потока getline() :

Результат выполнения

Манипуляторы потока

Функцию — манипулятор потока можно включать в операции помещения в поток и извлечения из потока ( >).

В С++ имеется ряд манипуляторов. Рассмотрим основные:

МанипуляторОписание
endlПомещение в выходной поток символа конца строки ‘
decУстановка основания 10-ой системы счисления
octУстановка основания 8-ой системы счисления
hexУстановка основания 16-ой системы счисления
setbaseВывод базовой системы счисления
width(ширина)Устанавливает ширину поля вывода
fill(‘символ’)Заполняет пустые знакоместа значением символа
precision(точность)Устанавливает количество значащих цифр в числе (или после запятой) в зависимости от использования fixed
fixedПоказывает, что установленная точность относится к количеству знаков после запятой
showposПоказывает знак + для положительных чисел
scientificВыводит число в экспоненциальной форме
get()Ожидает ввода символа
getline(указатель, количество)Ожидает ввода строки символов. Максимальное количество символов ограничено полем количество

Пример Программа ввода-вывода значения переменной в C++

Та же программа, написанная на языке Си

Пример Использование форматированного вывода

Результат выполнения

Еще один пример использования форматированного вывода: для t∈[0;3] с шагом 0,5 вычислить значение y=cos(t).

Результат выполнения

Мне надо в выводе шесть 0, на С это будет так:

Как это можно на плюсах оформить?

1 ответ 1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.11.15.35459

Я относительно новичок в мире C ++.
я знаю std::cout используется для вывода на консоль в C ++. Но рассмотрим следующий код на C:

Как добиться аналогичного форматирования значения типа double с точностью до 2 десятичных знаков, используя cout в С ++?

Я знаю, что C ++ обратно совместим с C. Но есть ли в C ++ эквивалент printf (), если так, то где он определяется?

Решение

Это то, что вы хотите:

Другие решения

Есть нет эквивалент. Это боль, используя cout для форматированного вывода.

Все предлагаемые решения звонят setprecision и подобные ужасны при использовании длинных форматов.

boost::format не поддерживает некоторые очень хорошие функции. Несовместимость с printf . Я все еще использую printf потому что это непобедимо.

Если вы действительно хотите использовать те же методы форматирования, что и в C, вы можете использовать Повысьте :: формат , который делает именно это:

Но есть ли эквивалент printf () в C ++, если так, то где он определен?

Есть предложение по стандартам P0645 добавить аналогичное средство форматирования в C ++. В то же время вы можете использовать библиотека который реализует это предложение и многое другое:

P0645 и используют синтаксис строки формата, подобный Python, который похож на printf х но использует в качестве разделителей вместо % ,

Также информация о типе сохраняется, поэтому вам не нужно l или другие шумовые характеристики.

Сохраните вашу программу как CPP и запустить его.

Он запускает и печатает ответ.

Потому что C ++ также имеет printf() а также scanf() лайк C ,

Вы также можете использовать sprintf в C ++, чтобы «напечатать» строку, а затем вырезать эту строку. Эта стратегия использует ваш опыт форматирования в стиле printf.

Если вы хотите использовать printf как форматирование вы, вероятно, должны использовать snprintf (или построить распределительный вариант этого поверх этого). Обратите внимание, что sprintf требует, чтобы вы были в состоянии гарантировать, что результат не превысит буфер, в котором вы должны сохранять определенное поведение. С snprintf с другой стороны, можно гарантировать, что он не будет переполнять буфер, так как вы указываете максимальное количество символов, которое будет записано в строку (вместо этого он усекает вывод).

Вы могли бы даже построить что-то, что можно напрямую подавать на ostream на вершине snprintf автоматически распределяя буфер и помещая в объект, который при уничтожении освобождает эту память. Это в дополнение к способу подачи объекта на ostream закончил бы это. Что-то вроде (с местом для улучшений):

тогда вы используете это как:

Если вы используете библиотеки GNU, вы, конечно, можете использовать printf непосредственно с cout а также stdout один и тот же объект тогда. В противном случае вам следует избегать смешивания stdio а также iostreams поскольку нет никакой гарантии, что они синхронизированы друг с другом.

Чтобы вывести значение на консоль с помощью C ++, вам нужен глобальный объект ostream соиЬ и заголовочный файл Вы также можете использовать различные флаги форматирования для управления представлением вывода …

Встроенная ОС, поддержка и услуги | ОСРВ, гипервизор

Встроенные системы стали более сложными и программными, чем когда-либо. Позвольте нам предоставить программную основу и строительные блоки, которые помогут вам сосредоточиться на предоставлении дополнительных функций и программного обеспечения, а не на обслуживании ОС.

Предлагаем:
  • Продукты Foundation, включая ОСРВ QNX Neutrino, платформу разработки программного обеспечения QNX (SDP) с POSIX-совместимой средой разработки и гипервизор QNX.
  • Сертифицированные по безопасности варианты нашей продукции, которые ускорят ваши усилия по сертификации.
  • Решения безопасности, включая наше решение для безопасного обновления по беспроводной сети (OTA) и наше уникальное решение для анализа двоичного кода.
  • Промежуточное ПО

  • Plus для ускорения ваших усилий по разработке и ускорения вывода на рынок.

Узнать больше

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

Предлагаем:
  • Разнообразные пакеты поддержки и технические советы от разработчиков, инженеров и архитекторов.
  • Лучшая в своем классе документация по продукту, дополненная нашей базой знаний.
  • Пакеты поддержки платы

  • для широкого спектра процессоров Arm® и x86.
  • Управляемый жизненный цикл продукта с регулярными обновлениями и исправлениями.

Просмотреть ресурсы для разработчиков

Если вам нужно расширить свою команду, запустить проект или сертифицировать продукты, вы можете положиться на наших экспертов по встроенным системам и ОС, которые предоставят вам необходимые знания и опыт.

Предлагаем:
  • Услуги безопасности и решения для двоичного анализа
  • Индивидуальная разработка
  • Службы безопасности

  • помогут вам получить сертификаты IEC 61508, ISO 26262, IEC 62304 и EN 5012X.
  • Учебные курсы, разработанные и проведенные экспертами в области функциональной безопасности и разработки встроенного программного обеспечения.

Узнать больше

Исходный код iostream [libstdc ++ — v3 / include / std / iostream] — Браузер кода Woboq

Предупреждение. Этот файл не был частью базы данных компиляции.В нем может быть много ошибок синтаксического анализа.

@ Стандартное имя Объекты потока

Предупреждение. Этот файл не был частью базы данных компиляции.В нем может быть много ошибок синтаксического анализа.

1 // Стандартные объекты iostream — * — C ++ — * —
2
3 // Copyright (C) 1997-2017 Free Software Foundation, Inc .
4 //
5 // Этот файл является частью библиотеки GNU ISO C ++. Эта библиотека бесплатна
6 // программное обеспечение; вы можете распространять и / или изменять его в соответствии с условиями
7 // Стандартной общественной лицензии GNU, опубликованной
8 // Free Software Foundation; либо версия 3, либо (по вашему выбору)
9 // любая более поздняя версия.
10
11 // Эта библиотека распространяется в надежде, что она будет полезна,
12 // БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
13 // КОММЕРЧЕСКАЯ ЦЕННОСТЬ или ПРИГОДНОСТЬ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. См.
14 // Стандартную общественную лицензию GNU для получения более подробной информации.
15
16 // В соответствии с разделом 7 GPL версии 3 вам предоставляются дополнительные
17 // разрешения, описанные в исключении библиотеки времени выполнения GCC , версия
18 // 3.1, как опубликовано Free Software Foundation.
19
20 // Вы должны были получить копию Стандартной общественной лицензии GNU и
21 // копию библиотеки времени выполнения GCC Исключение вместе с этой программой;
22 // см. Файлы КОПИРОВАНИЕ3 и КОПИРОВАНИЕ.ВРЕМЯ РАБОТЫ соответственно. Если нет, см.
23 // .
24
25 / ** @file include / iostream
26 * Это заголовок стандартной библиотеки C ++.
27 * /
28
29 //
30 // ISO C ++ 14882: 27.3 Стандартные объекты iostream
31 //
32
33 #ifndef _GLIBCXX_IOSTREAM
34 _GILine

35
36 #pragma GCC system_header
37
38 #include
39 #include
40 #include
41
42 пространство имен CSTD _G по умолчанию )
43 {
44 _GLIBCXX_BEGIN_NAMESPACE_VERSION
45
46 / **
47

/ **
47
48 *
49 * & lt; iostream & gt; заголовок объявляет восемь стандартных потоков
50 * объектов .Для других заявлений см.
51 * http://gcc.gnu.org/onlinedocs/libstdc++/manual/io.html
52 * и @link iosfwd I / O форвардные объявления @endlink
53 *
54 * По умолчанию они требуются для взаимодействия с глобальным C
55 * @c библиотеки FILE и быть доступными во время запуска и завершения программы
56 *.Для получения дополнительной информации см. Раздел руководства
57 *, ссылка на который приведена выше.
58 * /
59 // @ {
60 extern istream cin ; /// Связан со стандартным вводом
61 extern ostream cout ; /// Связано со стандартным выводом
62 extern ostream cerr ; /// Связано со стандартной ошибкой (без буферизации)
63 extern ostream clog ; /// Связано со стандартной ошибкой (с буферизацией)
64
65 #ifdef _GLIBCXX_USE_WCHAR_T
66 extern wistream wcin ; /// Связан со стандартным вводом
67 extern wostream wcout ; /// Связано со стандартным выводом
68 extern wostream wcerr ; /// Связано со стандартной ошибкой (без буферизации)
69 extern wostream wclog ; /// Связано со стандартной ошибкой (буферизовано)
70 #endif
71 // @}
72
73 // Для создания файловых буферов для cout, cin, cerr, clog et.al.
74 статический ios_base :: Init __ioinit ;
75
76 _GLIBCXX_END_NAMESPACE_VERSION
77} // пространство имен
78
79 _Gendif /
80

Выучить пространство имен std, cout, endl, comments

В предыдущей главе вы видели, как напечатать «Hello World» на экране. Теперь давайте посмотрим, как работает код, понимая значение каждой его строки.

 #include 
int main ()
{
   std :: cout << "Привет, мир";
   возврат 0;
}
 

Выход

При компиляции вышеуказанного кода на экране будет напечатано Hello World .

Итак, вы только что написали код, который может печатать что угодно на экране. Звучит отлично! Теперь давайте подробно разберемся с этим кодом, чтобы мы могли распечатать любое сообщение.

Начнем с std :: cout << "Hello World"; - std (сокращенная форма стандарта) - это пространство имен, а cout определено в этом пространстве имен std. Теперь у вас в голове возникает вопрос: что такое пространство имен?

По сути, пространство имен - это особая область, внутри которой что-то определяется.Итак, в этом случае cout определен в пространстве имен std . Таким образом, std :: cout указывает, что cout определен в пространстве имен std или использовать определение cout , которое определено в пространстве имен std .

Итак, std :: cout используется для использования определения cout из пространства имен std.

<< - это оператор вывода .
Вы узнаете об операторах в следующих главах. А пока просто поймите, что здесь << используется для передачи "Hello World" в cout.Таким образом, std :: cout << "Hello World"; передает «Hello World» в cout, и cout напечатает этот Hello World на экране.

Еще одна вещь, которую вам нужно знать, это то, что std :: cout - это объект в библиотеке iostream . Вы узнаете об объектах в следующих главах. А пока просто поймите, что вся вещь std :: cout находится внутри библиотеки iostream , и для этого нам нужно включить iostream в наш код.
Чтобы включить библиотеку iostream, мы пишем следующий код.

Здесь #include связывает нашу программу с библиотекой iostream или сделает библиотеку iostream доступной для нашего использования.

Итак, после включения iostream , мы готовы использовать cout в нашей программе.

Итак, #include сделает std :: cout доступным для использования, а std :: cout << "Hello World" будет использовать определение cout из пространства имен std для печати Hello World (передано <<) на экране.

Давайте перейдем к int main . main - это функция.
Итак, что такое функция?

Функция похожа на машину, которая берет что-то у нас (не обязательно), а затем выполняет над этим операцию. Проще говоря, функция принимает входных данных от пользователя и возвращает выходных данных . Просто, не правда ли?

int main () - main - это функция или main - это имя функции.
int main () означает, что функция main дает нам целое число (на выходе она возвращает целое значение).

возврат 0; - Как упоминалось ранее, функция main возвращает целочисленное значение (int main ()), поэтому здесь мы возвращаем 0. return - это ключевое слово , которое используется для возврата некоторого значения из функции. Это указывает на то, что наша программа была успешно запущена, и мы завершаем нашу основную функцию этим оператором return.

{} - Фигурные скобки "{}", следующие за функцией main, представляют тело функции main.Все операторы, написанные в фигурных скобках, находятся в теле функции main.

Почему мы используем главную функцию?


Когда выполняется код C ++, сначала выполняется основная функция. Таким образом, операторы, написанные внутри основной функции (в фигурных скобках после основной функции), будут выполнены первыми. Итак, чтобы выполнить любой оператор, мы помещаем его в основную функцию.

Выполнение каждой программы C ++ начинается с этой основной функции .Все программы на C ++ должны иметь эту функцию main ().

Итак, наш рабочий процесс -
#include включил библиотеку iostream. После этого в основной функции std :: cout << "Hello world" напечатал Hello world на экране, а return 0 вернул 0 из основной функции, указывая на успешное выполнение нашего кода.

Печать новой строки


В нашем предыдущем примере мы напечатали «Hello World». Что, если мы хотим вывести «Hello» и «World» в две отдельные строки?

Мы можем сделать это, используя std :: endl , который используется для изменения строки.Как и cout, endl также определен в пространстве имен std и поэтому записывается как std :: endl.

Давайте посмотрим на следующий пример.

 #include 
int main ()
{std :: cout << "Привет" << std :: endl;
    std :: cout << "Мир";
    возврат 0;
}
 

Выход

Здесь, после того, как "Hello" было напечатано, std :: endl изменил строку и, таким образом, "World" был напечатан на отдельной строке. Если бы мы не написали std :: endl, то Hello и World были бы напечатаны в одной строке, как показано ниже.

 #include 
int main ()
{
   std :: cout << "Привет";
   std :: cout << "Мир";
   возврат 0;
}
 

Выход

В приведенном выше примере std :: cout << "Hello"; напечатал «Hello», а затем std :: cout << "World"; напечатано «Мир». Таким образом, World был напечатан сразу после Hello без пробелов между ними.

Мы также можем использовать несколько << , чтобы напечатать результат выше, как показано ниже.

 #include 
int main ()
{
   std :: cout << "Привет" << "Мир";
   возврат 0;
}
 

Выход

Другой способ печати новой строки


Давайте сначала посмотрим на этот пример:

 #include 
int main ()
{
   std :: cout << "Hello \ nWorld";
   возврат 0;
}
 

Выход

\ n - это символ новой строки, который используется для изменения строки. Он похож на другой символ, но печатает новую строку.
В Hello \ nWorld , когда компилятор выводит H, когда встречает «H», e, когда «e». Точно так же он печатал новую строку, когда встречал \ n

Комментарий


Комментарии - это утверждения, которые написаны внутри нашего кода, которые просто игнорируются компилятором при компиляции нашего кода. Они написаны, чтобы сделать наш код более читабельным. Комментарии пишутся между '/ * * /' или после // .

Почему комментарии?


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

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

 // Это однострочный комментарий
// Это тоже комментарий
#include 
int main ()
{
   std :: cout << "Привет, мир";
   возврат 0;
}
 

Выход

Комментарий также может быть многострочным , заключив его между / * и * / , как показано в следующем примере. Но мы не можем поместить один комментарий внутрь другого. например - / * Это / * комментарий * / * / недействителен.

 / * Код Hello World * /
/ * Комментарии не будут компилироваться и будут проигнорированы * /
/* Это
многострочный
комментарий*/
#include 
int main ()
{
   std :: cout << "Привет, мир";
   возврат 0;
}
 

Выход

Кодирование - это практика и решение вопросов.Итак, решайте вопросы как можно больше. Решайте вопросы после завершения каждой главы, а затем переходите только к следующей главе.

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

Лучший способ предсказать будущее - это создать его.
-Питер Друкер

Input Output в C ++ - (cout, cin, cerr, clog)

Каждый новичок в C ++ сталкивался с объектами ввода-вывода (т.е.е. cin & cout) и какой там функционал и т. д. . Но самое главное, эти две операции не являются частью основного языка C ++. Эти функции cin & cout определены в стандартной библиотеке C ++ (находится в пространстве имен std).

При изучении языка вы включили библиотеку iostream , чтобы использовать объекты cin и cout для операций ввода / вывода. C ++ предоставляет множество таких библиотек для различных задач. В C ++ ввод-вывод выполняется в виде последовательности байтов, известной как потоки , .

Потоки в C ++

Поток - это последовательность байтов, к которой можно получить доступ последовательно, и которая может создавать или потреблять неограниченные объемы данных. В C ++ мы чаще всего сталкиваемся с двумя потоками ввода и вывода.

Входной поток , который содержит входные данные от пользователя, такие как клавиатура, файл и т. Д., И ожидает в буфере, пока программа не будет готова выполнить его.

Точно так же выходной поток хранит данные от устройств вывода до тех пор, пока они не будут готовы принять эти данные, устройства вывода включают монитор, принтер и т. Д.

Важно : Буфер является временным заполнителем для многих языков программирования в памяти (оперативная память / диск), на которую данные могут быть выгружены, а затем может быть произведена обработка. Буфер увеличивает производительность компьютера, позволяя выполнять операции чтения / записи большими фрагментами.

Небуферизованный вывод адресуется немедленно, тогда как буферизованный вывод сохраняется и передается на консоль вывода в виде всей последовательности данных. Стандартные библиотеки C ++ предоставляют обширный набор объектов ввода-вывода.В этой главе будут обсуждаться самые основные и наиболее распространенные операции ввода-вывода, необходимые для программирования на C ++.

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

Заголовочные файлы библиотеки ввода-вывода в C ++

Заголовочный файл Iostream определяет объекты потока ввода / вывода, такие как cin, cout, cerr, clog , который соответствует стандартному потоку ввода-вывода , небуферизованная ошибка буферизации и поток .

Стандартные потоки ввода-вывода в C ++

C ++ поставляется с четырьмя предопределенными стандартными объектами потока в библиотеках, что удобно для нашего использования. Включение автоматически включает также , , , и .

Стандартный входной поток (cin)

Объект cin является экземпляром класса istream . cin привязан к стандартным устройствам ввода вроде клавиатуры.Объект cin используется с оператором извлечения потока ( << ).

  #include 
 
используя пространство имен std;
 
int main () {
   char str [50];
 
   cout << "Сказать привет МИРУ:";
   cin >> str;
   cout << str << endl;


возврат 0;
 
}  

Вывод:

 Скажи "Привет, МИР!"
Привет, мир! 

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

Преимущество C ++ в том, что нам не нужно беспокоиться о типе данных, вводимых пользователем, эта работа выполняется компилятором C ++, автоматически выбирающим соответствующий оператор извлечения потока (>>) для извлечения значения и сохранения его в данные переменные.

Точно так же может быть задано более одного входа, как указано ниже.

  cin >> var1 >> var2;  
Стандартный выходной поток (cout)

Объект cout является экземпляром класса ostream . cout привязан к стандартным устройствам вывода, таким как монитор, который отображает вывод. Объект cout используется с оператором вставки потока (<<).

  #include 
 
используя пространство имен std;
 
int main () {
char str [] = "Привет, мир!";
   
cout << str << endl;

возврат 0;
}  

Выход :

 Hello World! 

В C ++ вам не нужно беспокоиться о типе выходных данных, компилятор автоматически определяет тип данных выходной переменной «str» и использует соответствующий оператор вставки потока для отображения значения.Оператор вставки << перегружен для вывода данных встроенных типов integer, float, double, строк и значений указателей.

Оператор вставки << может использоваться более одного раза в одном операторе, как показано выше, а endl используется для добавления новой строки в конец строки.

Стандартный поток ошибок без буферизации (cerr)

Объект cerr является экземпляром класса ostream и привязан к стандартному устройству ошибок, которое отображает сообщение об ошибке на экране.Объект cerr является небуферизованным, поэтому каждый вставленный поток немедленно отображается на устройстве вывода. cerr используется в сочетании с оператором вставки потока (<<), как показано в следующем примере.

  #include 
 
используя пространство имен std;
 
int main () {
 
   cerr << "Произошла ошибка!" << endl;


возврат 0;
}  

Вывод:

 Произошла ошибка! 
Стандартный поток журнала (засорение) - Буферизованный поток ошибок

Объект засорение является экземпляром класса ostream и привязан к стандартному устройству ошибок, которое отображает сообщение об ошибке на экране, но объект засоряется находится в буфере.Это означает, что каждая вставка в clog будет удерживаться в буфере до тех пор, пока буфер не будет заполнен или пока буфер не будет очищен.

Заглушка используется в сочетании с оператором вставки потока (<<), как показано в следующем примере.

  #include 
 
используя пространство имен std;
 
int main () {
 
   clog << "Произошла ошибка!" << endl;

возврат 0;
}  

Вывод:

 Произошла ошибка! 

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

В C ++ существует множество заголовочных файлов библиотеки для ввода-вывода, таких как , , , , , , , . , который будет объяснен в дальнейших уроках.

Пока не учись, подпишись и поделись ценными отзывами!

Библиотеки классов

- AP Computer Science A

Если вы считаете, что контент, доступный через Веб-сайт (как определено в наших Условиях обслуживания), нарушает
или другие ваши авторские права, сообщите нам, отправив письменное уведомление («Уведомление о нарушении»), содержащее
в
информацию, описанную ниже, назначенному ниже агенту.Если репетиторы университета предпримут действия в ответ на
ан
Уведомление о нарушении, оно предпримет добросовестную попытку связаться со стороной, которая предоставила такой контент
средствами самого последнего адреса электронной почты, если таковой имеется, предоставленного такой стороной Varsity Tutors.

Ваше Уведомление о нарушении прав может быть отправлено стороне, предоставившей доступ к контенту, или третьим лицам, таким как
в качестве
ChillingEffects.org.

Обратите внимание, что вы будете нести ответственность за ущерб (включая расходы и гонорары адвокатам), если вы существенно
искажать информацию о том, что продукт или действие нарушает ваши авторские права.Таким образом, если вы не уверены, что контент находится
на Веб-сайте или по ссылке с него нарушает ваши авторские права, вам следует сначала обратиться к юристу.

Чтобы отправить уведомление, выполните следующие действия:

Вы должны включить следующее:

Физическая или электронная подпись правообладателя или лица, уполномоченного действовать от их имени;
Идентификация авторских прав, которые, как утверждается, были нарушены;
Описание характера и точного местонахождения контента, который, по вашему мнению, нарушает ваши авторские права, в \
достаточно подробностей, чтобы позволить репетиторам университетских школ найти и точно идентифицировать этот контент; например, мы требуем
а
ссылка на конкретный вопрос (а не только на название вопроса), который содержит содержание и описание
к какой конкретной части вопроса - изображению, ссылке, тексту и т. д. - относится ваша жалоба;
Ваше имя, адрес, номер телефона и адрес электронной почты; и
Ваше заявление: (а) вы добросовестно считаете, что использование контента, который, по вашему мнению, нарушает
ваши авторские права не разрешены законом, владельцем авторских прав или его агентом; (б) что все
информация, содержащаяся в вашем Уведомлении о нарушении, является точной, и (c) под страхом наказания за лжесвидетельство, что вы
либо владелец авторских прав, либо лицо, уполномоченное действовать от их имени.

Отправьте жалобу нашему уполномоченному агенту по адресу:

Чарльз Кон
Varsity Tutors LLC
101 S. Hanley Rd, Suite 300
St. Louis, MO 63105

Или заполните форму ниже:

.

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

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