Что такое endl в C++?
Оператор endl служит для перевода текста на новую строку. Указывает что строка закончилась, а соответсвенно следующий текст, который будет отображен в консоле будет с новой строки. Записывается следующим образом:
int main() < std::coutКомментарии
Пока комментариев нет
Профессия Unity разработчик
Старт: 02 февраля 2024
Функции
Это глобальные функции шаблона, определенные в . Сведения о функциях-членах см. в документации по классу basic_ostream .
endl
Завершает строку и очищает буфер.
template class basic_ostream& endl( basic_ostream& Ostr);Параметры
Ostr
Объект типа basic_ostream.Возвращаемое значение
Объект типа basic_ostream.
Замечания
Манипулятор вызывает Ostr.put(Ostr.widen('\n')), а затем вызывает Ostr.смыть. Он возвращает Ostr.
Пример
// ostream_endl.cpp // compile with: /EHsc #include int main( )testingконцы
template class basic_ostream& ends( basic_ostream& Ostr);Параметры
Ostr
Объект типа basic_ostream .Возвращаемое значение
Объект типа basic_ostream .
Замечания
Манипулятор вызывает Ostr.put(Elem('\0')). Он возвращает Ostr.
Пример
// ostream_ends.cpp // compile with: /EHsc #include int main( )ab cflush
template class basic_ostream& flush( basic_ostream& Ostr);Параметры
Ostr
Объект типа basic_ostream .Возвращаемое значение
Объект типа basic_ostream .
Замечания
Манипулятор вызывает Ostr.смыть. Он возвращает Ostr.
Пример
// ostream_flush.cpp // compile with: /EHsc #include int main( )testingswap
Меняет местами значения двух объектов basic_ostream .
template void swap( basic_ostream& left, basic_ostream& right);Параметры
left
Ссылка lvalue на объект basic_ostream .right
Ссылка lvalue на объект basic_ostream .Замечания
Функция шаблона swap выполняет left.swap(right) .
1.5 – Знакомство с iostream: cout, cin и endl
В этом уроке мы подробнее поговорим о std::cout , который мы использовали в нашей программе «Hello world!» для вывода в консоль текста «Hello world!». А также узнаем, как получить данные от пользователя, которые мы будем использовать, чтобы сделать наши программы более интерактивными.
Библиотека ввода/вывода
Библиотека ввода/вывода (библиотека io) является частью стандартной библиотеки C++, которая имеет дело с базовым вводом и выводом. Мы будем использовать функции этой библиотеки для получения ввода с клавиатуры и вывода данных в консоль. Буквы io в iostream означают «input/output» (ввод/вывод).
Чтобы использовать функции, определенные в библиотеке iostream , нам нужно включить заголовочный файл iostream в начало любого исходного файла, который использует содержимое, определенное в iostream , например:
#include // остальной код использует функциональность iostreamstd::cout
Библиотека iostream содержит несколько предопределенных переменных, которые мы можем использовать. Одной из наиболее полезных является std::cout , которая позволяет нам отправлять данные в консоль для печати в виде текста. cout означает «character output» (вывод символов).
Вспомним нашу программу Hello world :
#include // для std::cout int main() < std::coutВ эту программу мы включили iostream , чтобы у нас был доступ к std::cout . Внутри нашей функции main() мы используем std::cout вместе с оператором вставки ( для отправки текста « Hello world! » в консоль для печати.
std::cout может печатать не только текст, но и числа:
#include // для std::cout int main() < std::coutЭто дает результат:
Его также можно использовать для вывода значений переменных:
#include // для std::cout int main() < int x; // определяем целочисленную переменную x, инициализированную значением 5 std::coutЭто дает результат:
Чтобы напечатать несколько элементов в одной строке, для объединения (связывания) нескольких частей выводимых данных, оператор вставки (
#include // для std::cout int main()Эта программа печатает:
Hello world!Вот еще один пример, в котором мы печатаем и текст, и значение переменной в одном выражении:
#include // для std::cout int main() < int x; std::coutЭта программа печатает:
x is equal to: 5std::endl
Как вы думаете, что напечатает следующая программа?
#include // для std::cout int main()Результат может вас удивить:
Hi!My name is Alex.Отдельные выражения вывода не приводят к отдельным выводимым строкам в консоли.
Если мы хотим выводить в консоль отдельные выводимые строки, нам нужно указать консоли, когда необходимо переместить курсор на следующую строку.
Один из способов сделать это – использовать std::endl . При выводе с помощью std::cout , std::endl выводит в консоль символ новой строки (заставляя курсор переместиться в начало следующей строки). В этом контексте endl означает «end line» (конец строки).
#include // для std::cout и std::endl int main() < std::coutHi! My name is Alex.Совет
В приведенной выше программе второй std::endl технически не нужен, так как программа сразу же после этого завершается. Однако он служит двум полезным целям: во-первых, он помогает указать, что строка вывода является «законченной мыслью». Во-вторых, если мы позже захотим добавить дополнительные выражения вывода, нам не нужно будет изменять существующий код. Мы можем просто добавить новые выражения.
std::endl против '\n'
Использование std::endl может быть немного неэффективным, поскольку фактически выполняет две задачи: перемещает курсор на следующую строку и «очищает» вывод (обеспечивает немедленное отображение на экране). При записи текста в консоль с использованием std::cout , std::cout обычно всё равно очищает вывод (а если нет, это обычно не имеет значения), поэтому наличие очистки от std::endl редко бывает важным.
Из-за этого обычно предпочтительнее использовать символ '\n' . Символ '\n' перемещает курсор на следующую строку, но не выполняет избыточную очистку, поэтому он работает лучше. Символ '\n' также легче читать, поскольку он короче и может быть встроен в существующий текст.
Вот пример, в котором '\n' используется двумя разными способами:
#include // для std::cout int main() < int x; // Использование '\n' в одиночном режиме std::coutЭтот код напечатает:
x is equal to: 5 And that's all, folks!Обратите внимание, что когда '\n' используется сам по себе для перемещения курсора на следующую строку, необходимы одинарные кавычки. При встраивании в текст, который уже заключен в двойные кавычки, одинарные кавычки не нужны.
Мы рассмотрим, что такое '\n' более подробно, когда перейдем к уроку о символах (4.11 – Символы).
Лучшая практика
При выводе текста в консоль лучше использовать '\n' вместо std::endl .
Предупреждение
'\n' использует обратный слеш (как и все специальные символы в C++), а не прямой слеш. Использование прямого слеша (например, '/n' ) может привести к неожиданному поведению.
std::cin
std::cin – еще одна предопределенная переменная, определенная в библиотеке iostream . В то время как std::cout выводит данные в консоль с помощью оператора вставки ( оператора извлечения ( >> ). Для дальнейшего использования входные данные должны быть сохранены в переменной.
#include // для std::cout и std::cin int main() < // запрашиваем у пользователя число std::cout ; // получаем число с клавиатуры и сохраняем его в переменной x std::cin >> x; std::coutПопробуйте скомпилировать эту программу и запустить ее самостоятельно. Когда вы запустите программу, строка 6 напечатает «Enter a number: ». Когда код дойдет до строки 10, ваша программа будет ждать, пока вы введете данные. После того, как вы введете число (и нажмете клавишу Enter ), введенное вами число будет присвоено переменной x . Наконец, в строке 11 программа напечатает «You entered », а затем число, которое вы только что ввели.
Например (я ввел 4):
Enter a number: 4 You entered 4Это простой способ получить от пользователя ввод с клавиатуры, и в будущем мы будем использовать его во многих наших примерах. Обратите внимание, что вам не нужно использовать '\n' при принятии входных данных, так как пользователю нужно будет нажать клавишу Enter , чтобы его входные данне были принят, а это переместит курсор на следующую строку.
Если ваш экран закрывается сразу после ввода числа, обратитесь к уроку «0.8 – Несколько основных проблем C++» для решения этой проблем.
Лучшая практика
Существуют споры о том, нужно ли инициализировать переменную непосредственно перед тем, как передать ей значение, предоставленное пользователем, через другой источник (например, std::cin ), поскольку значение, предоставленное пользователем, просто перезапишет значение инициализации. В соответствии с нашей предыдущей рекомендацией о том, что переменные всегда следует инициализировать, лучше всего сначала инициализировать переменную.
Мы обсудим, как std::cin обрабатывает недопустимые входные данные в следующем уроке (7.16 – std::cin и обработка недопустимых входных данных).
Для продвинутых читателей
Библиотека ввода/вывода C++ не позволяет принимать ввод с клавиатуры без нажатия пользователем клавиши Enter . Но если вам это нужно, то вам придется использовать стороннюю библиотеку. Для консольных приложений мы рекомендуем библиотеку pdcurses. Многие графические пользовательские библиотеки имеют для этого свои собственные функции.
Резюме
Программисты-новички часто путают std::cin , std::cout , оператор вставки ( > ). Вот простой способ запомнить:
- std::cin и std::cout всегда идут в левой части выражения;
- std::cout используется для вывода значения (cout = character output);
- std::cin используется для получения входного значения (cin = character input);
- >> используется с std::cin и показывает направление движения данных (если std::cin представляет клавиатуру, входные данные перемещаются с клавиатуры в переменную). std::cin >> x перемещает значение, введенное пользователем с клавиатуры, в x .
Подробнее об операторах мы поговорим в уроке «1.9 – Знакомство с литералами и операторами».
Небольшой тест
Вопрос 1
Рассмотрим следующую программу, которую мы использовали выше:
#include // для std::cout и std::cin int main() < // запрашиваем у пользователя число std::cout ; // получаем число с клавиатуры и сохраняем его в переменной x std::cin >> x; std::cout
Программа ожидает, что вы введете целочисленное значение, поскольку переменная x , в которую будет помещен пользовательские входные данные, является целочисленной переменной.
Запустите эту программу несколько раз и опишите, что произойдет, если вместо этого вы введете следующие типы входных данных:
а) Буква, например, h .
б) Число с дробной частью. Попробуйте числа с дробными составляющими меньше 0,5 и больше 0,5 (например, 3,2 и 3,7).
Дробная составляющая опущена.
в) Небольшое отрицательное целое число, например -3.
Всё прекрасно работает.
г) Слово, например «Hello».
д) Действительно большое число (минимум 3 миллиарда).
Вы получаете, казалось бы, случайное число.
Последнее предложение может быть особенно неожиданным. Попробуйте! Это происходит потому, что x может содержать числа только до определенного размера. После этого он «переполняется». Мы обсудим переполнение в следующем уроке.
Теги
Сохранить или поделиться
На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.
В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.
Присоединяйтесь к нам во ВКонтакте!
- Антенны и распространение радиоволн
- Беспроводная связь
- Высокочастотная техника
- Волоконно-оптические линии связи (ВОЛС)
- Измерительная техника
- Исполнительные механизмы и драйверы
- САПР
- Спутниковая связь
- Схемотехника
- Телевидение
- Цифровая электроника
- Технологии и инструменты
- Электронные компоненты
- А что внутри?
- Прочее (радиоэлектроника)
- Алгоритмы и структуры данных
- Базы данных
- Веб-разработка
- Мультимедиа (разработка ПО)
- Нейронные сети
- Паттерны проектирования
- Связь
- Системы сборки ПО
- Языки программирования
- Компьютерные сети
- Операционные системы
- Верстка
- Системы контроля версий
- История технологий
- Мультимедиа
- Новости телекома
- Нормативная документация
- Охрана труда
- Полезные программы
- Просто интересно
- Экономика телекоммуникаций и электронной промышленности
- Экономика и инвестиции
Мы в соцсетях
Урок №11. cout, cin и endl
На этом уроке мы рассмотрим такие объекты, как cout, endl и cin, существующие в языке C++.
Оглавление:
- Объект std::cout
- Объект std::endl
- Объект std::cin
- std::cin, std::cout, >
Объект std::cout
Как мы уже говорили на предыдущих уроках, объект std::cout (который находится в библиотеке iostream) используется для вывода данных на экран (в консольное окно). В качестве напоминания, вот наша программа «Hello, world!»:
std :: cout << "Hello, world!" ;
Для вывода нескольких предложений на одной строке оператор вывода
std :: cout << "a is " << a ;
А какой результат выполнения следующей программы?
std :: cout << "Hi!" ; std :: cout << "My name is Anton." ;
Возможно, вы удивитесь, но:
Hi!My name is Anton.
Объект std::endl
Если текст нужно вывести раздельно (на нескольких строках) — используйте std::endl. При использовании с std::cout, std::endl вставляет символ новой строки. Таким образом, мы перемещаемся к началу следующей строки, например:
std :: cout << "Hi!" << std :: endl ; std :: cout << "My name is Anton." << std :: endl ;
Hi!
My name is Anton.
Объект std::cin
std::cin является противоположностью std::cout. В то время как std::cout выводит данные в консоль с помощью оператора вывода std::cin получает данные от пользователя с помощью оператора ввода >> . Используя std::cin мы можем получать и обрабатывать пользовательский ввод:
std :: cout << "Enter a number: " ; // просим пользователя ввести любое число
std :: cin >> a ; // получаем пользовательское число и сохраняем его в переменную a
std :: cout << "You entered " << a << std :: endl ;
Попробуйте скомпилировать и запустить эту программу. При запуске вы увидите Enter a number: , а затем программа будет ждать, пока вы укажите число. Как только вы это сделаете и нажмете Enter, программа выведет You entered , а затем ваше число.
Например (я ввел 7 ):
Enter a number: 7
You entered 7
Это самый простой способ получения данных от пользователя. Мы будем его использовать в дальнейших примерах.
Если ваше окно закрывается сразу после ввода числа — смотрите Урок №7 (там есть решение данной проблемы).
Если же ввести действительно большое число, то вы получите переполнение, так как переменная а может содержать числа только определенного размера/диапазона. Если число больше/меньше допустимых максимумов/минимумов, то происходит переполнение. Об этом мы детально поговорим на следующих уроках.
std::cin, std::cout, >
Новички часто путают std::cin с std::cout и > . Вот простые способы запомнить их различия:
std::cin и std::cout всегда находятся в левой стороне стейтмента;
std::cout используется для вывода значения (cOUT = вывод);
std::cin используется для получения значения (cIN = ввод);
оператор ввода >> используется с std::cin и показывает направление, в котором данные движутся из консоли в переменную. std::cin >> a; (значение из консоли перемещается в переменную a ).
(1 775 оценок, среднее: 4,91 из 5)
Урок №10. Переменные, Инициализация и Присваивание
Урок №12. Функции
Комментариев: 48
Очень понравился формат изложения,буду ждать новых комментов и объяснений,в этом и есть весь смысл продвижения вперёд.Огромное спасибо!
Очень доходчиво описано по поводу операторов ввода и вывода. Читаю уроки с наслаждением, хотя уже давно программирую на С++, но в некоторых вопросах еще плаваю.
Здравствуйте Юрий, спасибо за уроки. Но очень не хватает информации по вот такой конструкции:
while ( std :: cin >> input_value )
часто встречаю ее, и не понимаю, она просто взрывает мозг))) помогите разобраться
Эта строка показывает, что цикл будет выполнятся столько раз, сколько пользователь введет, то есть даст значение переменной input_value
Это понятно, но что будет признаком конца ввода. Enter такой ввод игнорирует, считая его разделителем!
Боюсь тут все немного по другому:
while это и правда цикл и он будет выполнятся бесконечно пока условие в скобках будет "истинно", то есть не равно 0, это может быть что угодно(хоть цифра, хоть буква, хоть символ). Все что не равно нулю воспринимается как "истинна".
То есть в скобках происходит записывание того что вы введете с клавиатуры в переменную input_value, а затем будет произведена проверка содержимого этой переменной на 0. Если это не ноль то цикл повторяется и снова ждет что вы введете на клавиатуре.
НО! я мало знаю о visual studio, но если это воспроизвести вручную и сделать переменную input_value типа int, затем запустить программу и ввести 0, он все равно повторяет цыкл, а стоит ввести любую букву он записывает в эту переменную как 0 и завершает цикл. Вспоминается мем с Ньютоном: "Ну я **й его знает…"
Условие в цикле while имеет значения 0 либо 1. 0 это 0, 1 это все что угодно другое. При выполнении std::cin >> value, данная инструкция возвратит 0 при возникновении ошибки ввода. Если value имеет тип данных int и вы вводите целые значения с клавиатуры цикл не завершиться, так ошибки ввода скорее всего не произойдет. Но стоит вам ввести, условно, символ, то данная инструкция вернет 0, как ошибку и цикл завершиться. Попробуйте такой пример:


