[БЕЗ СЛОВ] В этом видео давайте посмотрим, как в C++ выполняется ввод и вывод. Начнем с того, что вы уже видели, как выполняется вывод. Для этого мы использовали объект cout. Чтобы выполнять ввод, используется объект cin. Собственно, здесь надо начать с того, чтобы объяснить, что такое cin и cout. Тут все просто: cin – это Console INput, консольный ввод, cout — Console OUTput, консольный вывод. Зная расшифровку этих названий, вы никогда не перепутаете, какой из них использовать для ввода, а какой для вывода. Давайте рассмотрим на примере, как ими пользоваться. Переключимся в Eclipse. И начнем с того, что посмотрим, как выводить значения разных типов. Ну, например, объявим переменную x типа int и переменную y типа string и запишем в них какие-то значения. Чтобы вывести их в консоль, запишем уже знакомую вам команду cout и оператор вывода в виде двух знаков <<. Укажем x, потом выведем символ пробела и выведем строчку y. Скомпилируем нашу программу. И видим, что она не компилируется. При этом, если мы сделаем двойной клик на сообщение об ошибке, вот сюда, то увидим, в какой строчке у нас проблемы. Собственно, у нас проблемы в той строчке, где мы пытаемся что-то вывести. И в чем проблема? В чем ошибка? Давайте еще раз посмотрим на ее название, ее описание. Здесь написано cout was not declared in this scope. Компилятор говорит: «Я не знаю, что такое cout, что означает это имя». Правильно. Потому что мы не сделали необходимую вещь. Мы не подключили библиотеку iostream. Собственно, этот пример был сделан специально. Я специально ее не подключил, чтобы вы запомнили, что для использования cin и cout нужно всегда подключать библиотеку iostream. Я ее сейчас подключил, компилирую программу, и вижу, что она компилируется и выводит 4, пробел, 'hello'. Собственно, что вы здесь можете видеть? Что вывод различных значений, различных типов в C++ осуществляется единообразно, с помощью оператора вывода, который представляет собой два знака << Неважно, какого типа у вас объект, вывод на консоль выполняется одинаково. Правда, есть определенные ограничения. Например: давайте объявим вектор, вектор целых чисел, d, ну и запишем в него пару каких-нибудь чисел. И захотим вывести его точно так же, как мы выводили объекты типа int и string. Запустим компиляцию, увидим, что у нас появилось очень много сообщений об ошибках консоли и какое-то сообщение об ошибке внизу. Здесь написано no match for 'operator <<' Собственно, компилятор нам говорит, что он не знает оператора вывода для вектора. Почему это так? Ну, это вызвано тем, что нет однозначного способа вывести вектор в поток, потому что мы можем разделять элементы вектора пробелами, запятыми, можем весь вектор взять в фигурные скобки или в квадратные. В общем, как-то по-разному можем его оформлять. И поэтому C++ оставляет на усмотрение программиста, каким образом нужно выводить вектор в поток, и не предоставляет никакого способа вывода по умолчанию. При этом я хочу отметить, что далее в нашем курсе мы с вами узнаем, что надо сделать, чтобы вот эта запись, cout << d, где d – это вектор, компилировалась и работала так, как нам надо. А сейчас же давайте перейдем к рассмотрению ввода. И начнем мы его с простой программы, которая считает сумму чисел. Давайте объявим две переменные x и y, считаем их и выведем сумму. Компилируем нашу программу. Она компилируется, замечательно. Запустим ее. Мы что-то считываем с консоли, поэтому у нас ничего в консоли не происходит, она ждет, когда мы что-то введем. Давайте введем, например, 2 и 5, нажмем enter и увидим, что наша программа вывела 7, собственно, сумму 2 и 5. Здесь вы можете видеть, каким образом выполняется ввод. Мы пишем cin, Console INput, оператор ввода в виде двух знаков >> и переменная, в которую мы хотим считать значение. И, собственно, вот так, как мы считываем два значения типа int, то 2 и 5, 2 считывается в x, а 5 считывается в y. Так же как и для вывода, ввод осуществляется единообразно для разных типов. Например, давайте напишем программу, которая здоровается с пользователем. Объявим переменную типа string, name, считаем ее и выведем "Hello, " << name; Скомпилируем, все компилируется, запустим. Опять же, программа ждет ввода с консоли, введем здесь имя, ну, например, Ilya. Нажмем Enter, наша программа пишет: Hello, Ilia. Она со мной поздоровалась. Вы здесь видите, что мы считываем значения типа string точно так же, как считывали int. Что еще здесь важно? Очень часто новички в C++ путаются, какой оператор использовать для ввода, а какой для вывода. И здесь проблема в том, что если их перепутать, например, для ввода использовать оператора из двух знаков <<, то программа не скомпилируется, что на самом деле хорошо, нам компилятор сразу подсказывает, что мы делаем что-то не то. Но он выдаст достаточно много сообщений об ошибках, в которых может быть нелегко разобраться. Вот я вам показал консоль компиляции, видите, как много здесь всего написано, хотя в списке ошибок есть сообщение, которое может нам помочь понять, что происходит. Написано: no match for 'operator вывода', что говорит о том, что нет оператора вывода для объекта cin. Чтобы не путаться в операторах ввода и вывода и всегда использовать правильный, нужно запомнить простой принцип: оператор ввода и оператор вывода задает направление, в котором перемещаются данные. Вот смотрите, когда мы что-то считываем, то данные перемещаются из cin в переменную. И именно в эту сторону указывают два знака >> . Когда мы что-то выводим, то данные перемещаются из констант и переменных нашей программы в объект cout. То есть в данном случае строка hello переместится в cout, и в эту сторону указывает оператор вывода – два знака <<. Зная этот простой принцип, вы никогда не перепутаете операторы ввода и вывода, и будете быстрее писать программы и меньше разбираться с ошибками компиляции. Вот мы поправили нашу программу, и она снова компилируется. И последний момент, который здесь хочется отметить. Давайте снова запустим нашу программу и введем теперь уже полное имя, вместе с фамилией. В моем случае это Ilia Shishkov. Я сейчас нажму Enter, и мог бы ожидать, что программа напишет: Hello, Ilia Shishkov Нажимаем Enter, она пишет: Hello, Ilia. Этот пример призван вам продемонстрировать, каким образом считываются строки в C++. Потому что, когда мы считываем строки, есть некоторая неоднозначность, как ее считать: до конца файла, или до символа перевода строки, или до первого пробела, или еще как-то. Здесь C++ вводит поведение по умолчанию. Он говорит, что строки, с помощью операторов ввода, всегда считываются до первого пробельного символа из-за того что мы здесь считываем только одну строку, считалось только имя Ilia, а фамилия была не считана. Если я, например, поправлю мою программу и добавлю сюда еще переменную для фамилии и считаю ее следом, то все будет работать так, как и ожидалось. Я ввожу Ilia Shishkov, нажимаю Enter и программа здоровается со мной, используя полное имя. Давайте подведем итоги. В этом видео мы с вами узнали, как выполнять вывод с помощью cout, как выполнять ввод с помощью cin, узнали, какой объект для чего использовать, дальше мы познакомились с особенностями ввода объектов типа string и узнали простой принцип, позволяющий не перепутать операторы ввода и вывода.