Урок №11. cout, cin и endl

  Юрий  | 

    | 

  Обновл. 23 Июл 2019  | 

 62047

 ǀ   36 

В этом уроке мы рассмотрим такие объекты, как cout, endl и cin.

std::cout

Как мы уже говорили в предыдущих уроках, объект std::cout (который находится в библиотеке iostream) используется для вывода данных на экран (в консольное окно). В качестве напоминания, вот наша программа «Hello, world!»:

Для вывода нескольких предложений на одной строке оператор вывода << нужно использовать несколько раз. Например:

Программа выведет:

a is 7

А какой результат выполнения следующей программы?

Возможно, вы удивитесь, но:

Hi!My name is Anton.

std::endl


Если текст нужно вывести раздельно (на нескольких строках) – используйте std::endl. При использовании с std::cout, std::endl вставляет символ новой строки. Таким образом, мы перемещаемся к началу следующей строки. Например:

Результат:

Hi!
My name is Anton.

std::cin

std::cin является противоположностью std::cout. В то время как std::cout выводит данные в консоль с помощью оператора вывода <<, std::cin получает данные от пользователя с помощью оператора ввода >>. Используя std::cin мы можем получать и обрабатывать пользовательский ввод.

Попробуйте скомпилировать и запустить эту программу. При запуске вы увидите 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::cout и показывает направление, в котором данные движутся от r-value в консоль. std::cout << 7; (значение 7 перемещается в консоль);

   оператор ввода >> используется с std::cin и показывает направление, в котором данные движутся из консоли в переменную. std::cin >> a; (значение из консоли перемещается в переменную a).

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (570 оценок, среднее: 4,93 из 5)
Загрузка...

Комментариев: 36

  1. Аватар Ростик:

    как std::cin получает данные от пользователя с помощью оператора ввода?

  2. Аватар beka:

    кто может мне помочь и объяснить мне по полочкам этот код

  3. Аватар Георгий:

    Юрий, я работаю в VS 2015 и создаю пустой проект без заголовка. Если я ввожу в cin число больше чем int, у меня выводится 0 и ошибки переполнения нет, а если не больше int, то выводится введённое число. Если я пробую вывести на консоль не инициализированную переменную, то ничего не выводится, нет мусорного значения и пустой строки, только "Для продолжения …". Это проблема с IDE или компилятором или что-то другое?

  4. Аватар Олег:

    Здравствуйте. Я не давно начал изучать программирование в целом. Не могли бы вы объяснить почему переменной а мы присвоили значение 0

    1. Юрий Юрий:

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

    2. Аватар Алексей:

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

  5. Аватар Sergey Groysman:

    Маленький вопрос вдогонку: на будущее, чтобы сократить место в комментарии, как вы вставляете PrnScr со своими стейтментами?

    1. Юрий Юрий:

      PrnScr — это, я так понял, код? Код вставляется через специальный плагин в админке этого сайта, каждый код в комментарии я модерирую самостоятельно. Вы можете вставлять всё, как есть, за экономию места — не переживайте.

      Если же у вас слишком большой код, то воспользуйтесь сервисом OnlineGDB — там можно сохранять/компилировать свой код на С++. Вставили свой код, запустили его (проверили) и нажали на кнопочку Share — вам выдадут ссылку, по которой вы сможете поделиться этим кодом. Тогда здесь в комментариях уже указываете только эту ссылку на ваш код и задаете свои вопросы.

      1. Аватар master114:

        а копировать нужно
        Share Code:
        или
        Embed Code:

        и нужно ли добавлять какие-нибудь дополнительные теги к этим ссылкам чтобы код в комментариях отображался корректно?

        1. Юрий Юрий:

          Копировать ссылку нужно с Share Code. Добавлять в комментарии дополнительные теги не нужно — вставили ссылку, свой комментарий и всё.

  6. Аватар Sergey Groysman:

    День добрый, Юрий.
    Спасибо за ваши уроки.
    Преамбула вопроса — при выполнении данной функции у меня вводимая переменная d отображается при её вводе и потом повторно уже в команде cout. Вопрос: как её убрать из видимости при вводе и оставить только в команде cout?
    Спасибо.

    1. Юрий Юрий:

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

      И прописать следующие строчки в функции main():

      Готовый код:

      1. Аватар Sergey Groysman:

        Спасибо.

        1. Юрий Юрий:

          Пожалуйста 🙂

  7. Аватар Анна:

    Нигде не могу найти, в чем смысл данной строки? просто возврат каретки?

    1. Юрий Юрий:

      endl — это перенос на новую строку и очистка потока, аналог переноса на новую строку — ‘\n’. cout << endl, как отдельная строчка, используется просто для переноса на новую строку, двойной cout << endl используется для пробела между строками (результат виден в консоли). Т.е. можно в конце строки добавить '\n':

      Либо

      Результат один и тот же, просто endl еще и очищает за собою поток данных.

      1. Аватар Анна:

        Спасибо! Теперь все понятно 🙂

  8. Аватар beksheikh:

    Здравствуйте.объясните если возможно для чего надо ставить стд?можно же и без него..работаю на дев с++.и еще для чего нужен std::cin(get)?..если хотите могу написать полный код.С уважением Я)).

    1. Юрий Юрий:

      Привет, об std:: говорится в уроке 24 и в уроке 54. Следуйте порядку, в котором изложены уроки и всё узнаете — всё, что вам нужно знать.

      Об std::cin(get) первый раз слышу, возможно std::cin.get()?

      1. Аватар beksheikh:

        Да.)не правильно написал

        1. Юрий Юрий:

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

    2. Аватар painkiller:

      Тоже работаю в этой IDE — она более простая и понятная для новичка!
      Чтобы не было никаких проблем с преждевременным закрытием окна консоли, нужно перед последней фигурной скобкой (}) писать следующее:
      cin.ignore(); — последнее нажатие ENTER игнорируется;
      cin.get(); — ждёт этого нажатия от Вас;

      1. Аватар Данила:

        сделал как вы написали — ничего не ввышло.

  9. Аватар Иван:

    Здравствуй. Подскажи как поместить в одну строку два ввода cin?
    Заранее спасибо.

    1. Юрий Юрий:

      Привет. Объясни кодом, на примере, что ты конкретно хочешь. Разместить два стейтмента cin можно на одной строке

      Между ними можно вставить cout и разместить всё также на одной строке:

      1. Аватар Иван:

        Мне нужно, чтобы 2 ввода, в консоли, на одной строчке были. Хочу, чтобы в консоли было примерно так:
        Калькулятор
        Введите цифру: 5 * 6 = 30

        1. Юрий Юрий:

          Во-первых, вы пробовали гуглить или искать ответ на StackOverflow?

          Во-вторых, вы можете делать вводы через cin на одной строчке в консоли, просто оставляя пробел между значениями. Например:

          В консоли вы можете вводить значения так:

          7 8

          и нажимать Enter.

          В итоге у вас будет x = 7 и y = 8. Что делать, чтобы выводить результат умножения этих двух значений на этой же строке, где вы ввели 7 и 8 — я не знаю. Вы должны обязательно нажать Enter, чтобы завершить ввод чисел для cin, а когда вы нажимаете Enter, то вы автоматически переходите на следующую строку. Решения, как это всё обойти, я не нашел.

        2. Аватар Данила:

          вот попробуйте так в строке ставить знак арифметического действия надо самому —

      2. Аватар Алексей:

        А почему в "cout" направление стрелок не в ту сторону ">>" ?

        1. Аватар Виталий:

          Здравствуйте Юрий!
          Скажите, будут ли эти программы работать на Андроиде( cppdroid) ?

  10. Аватар Katy:

    У меня не отображаются цифры и слова после Enter a number, а когда я поменяла cin на cout всё появилось. Не могли бы вы мне подсказать, что с этим делать?

    1. Юрий Юрий:

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

      Cin нужен для ввода данных (слов, цифр, букв, предложений), cout для вывода. Если вы только указываете cin в коде, то выводиться ничего не будет. Если вы указываете только cout, то выводиться будет то, что вы указали вместе с cout. То есть c помощью cin вывести вы не сможете ничего, так как он для этого не предназначен.

  11. Аватар Александр:

    Здравствуйте.
    Подскажите, после команд
    std::cin >>
    std::cout <<
    для чего нужны кавычки, ведь и так понятно что,
    std::cin — это ввод
    std::cout — это вывод
    Это просто такой синтаксис или эти команды также используются с другими символоми и соответственно имеют другое предназначение ?

    Начинаю изучение программирования с нуля, поэтому не хочу оставлять пробелов в понимании.

    1. Юрий Юрий:

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

      1. Аватар Александр:

        Я не однозначно сформулировал вопрос, я имел ввиду не эти кавычки "", а вот эти << и >>.
        Это просто такой синтаксис или команды
        std::cin
        std::cout
        могут использоваться с другими символами и соответственно иметь другое значение ?

        1. Юрий Юрий:

          Скобки показывают направление потока данных, >> — поток данных идёт внутрь, << — поток данных идёт изнутри. Скобки являются частью синтаксиса. Cin и cout всегда используются со скобками, другого значения, кроме как ввода/вывода данных у cin/cout нет.

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

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