Основы C++: Знакомство с потоком ввода/вывода (iostream), использование предопределенных переменных cout, cin, endl.

259 прочитали

Мы уже сталкивались с библиотекой ввода/вывода "io". Это было в статье "Как компьютер понимает программиста или краткий обзор стандартной структуры программы на C++? Там мы разбирали подключение в начале программы заголовочного файла <iostream> с описанием потоков ввода/вывода.

Библиотека "io" (от. англ input/output — ввод/вывод) — это часть стандартной библиотеки std в C++.

Немного о стандартной библиотеке std

Если говорить на совсем обывательском уровне о стандартной библиотеке. По сути, это хранилище, в котором сосредоточены различные функции, которые упрощают взаимодействие вашей программы с процессором. Например, в языке С++ нет встроенной функции ввода/вывода данных, именно поэтому внутри std есть заголовочный файл с библиотекой "io", которая и обеспечивает корректный ввод/вывод данных.

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

Подключение библиотеки "io" и вывод данных на экран

Мы уже разобрались, что библиотека "io" обеспечивает вывод данных на экран. Теперь мы научимся ее подключать.

Спойлер: мы это уже делали, когда писали нашу первую программу. Ссылку на статью, где мы это делали, я давал выше.

Для подключения библиотеки "io" мы должны включить следующую инструкцию в начало любого кода, который будет использовать функционал ввода/вывода данных:

____________________________________________________________________________________

#include <iostream>

____________________________________________________________________________________

Данная инструкция расшифровывается как: #include — включи, <iostream> — заголовочный файл, описывающий потоки ввода/вывода.

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

После того, как мы включили поток ввода/вывода, давайте попробуем его использовать в нашей программе на примере предопределенной переменной cout (character output — c англ. вывод символов) из библиотеки iostream, которая отвечает за вывод символов на экран в виде текста.

Спойлер: Мы уже делали это, когда писали первую программу, выводящую на экран текст: Hello, world

Попробуем вывести другой текст, используя следующий код:

Мы уже сталкивались с библиотекой ввода/вывода "io". Это было в статье "Как компьютер понимает программиста или краткий обзор стандартной структуры программы на C++?

Объяснение кода:

1 строка: инструкция включает поток ввода/вывода данных iostream, чтобы обеспечить вывод данных внутри функции main.

2 строка: инструкция определяет точку входа в программу с помощью главной функции main

3 и 6 строки: фигурные скобки, определяющие рабочую область функции main

4 строка: инструкция говорит — возьми предопределенную переменную cout из библиотеки std (std::cout), следуя правилам ввода и вывода данных, отправь в нее текст (<< "Hello, how are you";)

5 строка: говорит о том, что программа успешно завершила свою работу.

Резюме: Попробуйте написать код у себя в редакторе, используя пример выше.

Вывод чисел и значений, сохраненных в переменных, на экран

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

Эта программа выводит число 5900 на экран
Эта программа выводит число 5900 на экран

Попробуйте сами написать этот код, замените число на произвольное, посмотрите результат.

Выводит значение из переменной x на экран
Выводит значение из переменной x на экран

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

Чтобы напечатать несколько элементов друг за другом, используйте отправку в консоль несколько раз.

Эта программа выводит на экран консоли текст: Hello, World!
Эта программа выводит на экран консоли текст: Hello, World!

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

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

Эта программа печатает значения переменных в консоль.
Эта программа печатает значения переменных в консоль.

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

Перенос строки в консоли с помощью endl и \n

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

Напечатайте себе код со следующей картинки и скомпилируйте его. Узнаем, что получится, вместе!

Мы уже сталкивались с библиотекой ввода/вывода "io". Это было в статье "Как компьютер понимает программиста или краткий обзор стандартной структуры программы на C++?-6

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

Мы уже сталкивались с библиотекой ввода/вывода "io". Это было в статье "Как компьютер понимает программиста или краткий обзор стандартной структуры программы на C++?-7

Упс, кажется все напечаталось на одной строке и еще и пробела между предложениями нет.

Вывод: отдельные выражения вывода не дают инструкций выводить предложения на отдельных строках.

Давайте немного изменим инструкции в нашей программе!

Мы уже сталкивались с библиотекой ввода/вывода "io". Это было в статье "Как компьютер понимает программиста или краткий обзор стандартной структуры программы на C++?-8

Перепишите код в свой редактор и попробуем вместе запустить.

Мы уже сталкивались с библиотекой ввода/вывода "io". Это было в статье "Как компьютер понимает программиста или краткий обзор стандартной структуры программы на C++?-9

Yes! У нас все получилось! Такс, а как это работает?

В конце каждой инструкции вывода мы добавили новый элемент std::endl

Логически можно догадаться, что endl из стандартной библиотеки std — это функция, которая и работает как пробел, то есть переносит следующую инструкцию вывода на новую строку.

Но! Это не совсем так. endl (end line, конец строки) — это функция из коллекции стандартной библиотеки C++, которая вставляет символ переноса на новую строку, очищает буфер и заставляет компьютер немедленно вывести информацию на экран. В некоторых крупных программах такое чрезмерное использование endl в качестве пробельного символа будет сильно тормозить работу.

Но даже не к этому я хочу подвести вас, рассказывая про endl. Дело в том, что конструкция std::cout обычно выполняет те же функции очистки буфера и немедленного вывода, что endl. А значит использование endl в данном случае будет чрезмерным или даже избыточным. Тем не менее, задачу вывода на разных строках мы решили.

Но как ее решить эффективнее?

Управляющий символ \n

Воспользуемся простой конструкцией '\n'

Мы уже сталкивались с библиотекой ввода/вывода "io". Это было в статье "Как компьютер понимает программиста или краткий обзор стандартной структуры программы на C++?-10

Напишите код с картинки у себя в редакторе и запустим его вместе.

Да! Мы получили такой же результат, что и с endl.

Давайте разберемся, что такое \n и рассмотрим его некоторые особенности?

\n — это управляющий символ, который дает команду переноса при выводе следующей инструкции или части существующей инструкции на новую строку.

Этот управляющий символ можно использовать не только на примере выше, но и прямо внутри текста.

Мы уже сталкивались с библиотекой ввода/вывода "io". Это было в статье "Как компьютер понимает программиста или краткий обзор стандартной структуры программы на C++?-11

В этом случае отпадает необходимость в использовании одинарных кавычек. Попробуйте такой способ сами в редакторе кода.

Выводя текст в консоль пользуйтесь управляющим символом \n

Знакомство с вводом данных в консоль с помощью std::cin

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

Давайте придумаем программу, в которой нам нужно будет ввести какие-то данные, программа их сохранит и потом что-то нам скажет в ответ.

Мы уже сталкивались с библиотекой ввода/вывода "io". Это было в статье "Как компьютер понимает программиста или краткий обзор стандартной структуры программы на C++?-12

Разбираем программу:

Строка 4: Выводит на консоль сообщение на английском: "Введите число". Обратите внимание! В конце строки стоит \n для автоматического переноса на следующую строку, на которой вы будете вводить число.

Строка 5: Создает целочисленную переменную х, в которую мы поместим введенное число.

Строка 6: После создания переменной, программа будет ожидать пока вы введете число и нажмете enter, предварительно запустив инструкцию (std::cin >> x), которая означает: ожидай данные с устройства ввода (клавиатура), а после того, как примешь их, сохрани их в целочисленную переменную х.

Строка 7: Напечатает текст на английском означающий: Вы ввели число. И после, само число, которое вы ввели. Вы уже отправляли переменные в печать и здесь сделаете это снова. Обратите внимание на часть инструкции (<< " " <<), так мы выставляем пробел между текстом и числом. Еще можно выставить пробел прямо в текстовом блоке внутри кавычек.

Потренируйтесь с std::cin, напишите самостоятельно несколько простых программ на чтение данных с клавиатуры, и последующий вывод их на экран.

Резюме

std::cout — позволяет выводить текстовую информацию в консоль.

std::cin — позволяет принимать информацию с клавиатуры.

<< — отправляет информацию в консоль.

>> — принимает информацию с клавиатуры и записывает в переменную.

\n — переносит выполнение инструкции печати на новую строку.

Послесловие

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

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