Перейти к содержимому

Для чего нужен cin в c

  • автор:

Пример Оператор ввода cin в языке Си/C++

cin — ввод данных с консоли. Как только программа встречает данный оператор, она останавливается и ждет реакции пользователя. И, пока пользователь не введет данные и не нажмет «Ввод»(Enter). Только после этого продолжится выполнение.

Синтаксис оператора ввода: cin»имя_переменной;. имя_переменной указывает на переменную, в которую нужно поместить данные, введенные с клавиатуры:Например:

cin>>Age;

Эта команда помещает число, введенное с клавиатуры, в переменную с именем Аge.

Ввод сразу нескольких переменных, записывают таким образом:

cin>>имя_переменной1>>имя_переменной2>>. >>имя_переменнойN;

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

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

Пример ввода строки с пробелами cin.getline

#include #include using namespace std; int main()

Инглекс (Englex) — онлайн школа английского языка.

11 Самых Популярных Статей

  1. ulimit (limits.conf) управление ограничениями ресурсов ОС Linux
  2. 7 способов сравнения файлов по содержимому в Windows или Linux
  3. Что такое страны tier 1,2,3 и как правильно выбрать ГЕО для рекламной кампании
  4. Настройка, использование GitLab CI/CD
  5. Что означает «> /dev/null 2>&1» или перенаправление STDIN, STDOUT и STDERR?
  6. Настройка и использование сервера OpenVPN в Linux
  7. PostgreSQL: создать БД, пользователя, таблицу, установить права
  8. Виды кодировок символов
  9. Использование rsync в примерах
  10. my.cnf примеры конфигурации MySQL, MariaDB
  11. dig проверка DNS сервера

11 Самых Популярных Обзоров

  1. ТОП 4 лучших антидетект браузеров в 2023 (Бесплатные & Платные)
  2. Обзор и отзывы о Namecheap в 2023 году
  3. Хостинг Zomro (Зомро)
  4. Обзор браузера Dolphin
  5. ТОП 3 Проверенных VPN, Прокси, Хостинг VPS Турция в 2023
  6. Что такое абузоустойчивый хостинг (bulletproof)?
  7. Обзор и отзывы о 4VPS (FourServer) в 2023 году
  8. Обзор и отзывы AstroProxy в 2023 году
  9. Обзор и отзывы о PQ Hosting в 2023 году
  10. Обзор и отзывы о Hostinger в 2023 году: преимущества и недостатки
  11. Проверенные VPS / VDS хостинг провайдеры

1.5 – Знакомство с iostream: cout, cin и endl

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

Библиотека ввода/вывода

Библиотека ввода/вывода (библиотека io) является частью стандартной библиотеки C++, которая имеет дело с базовым вводом и выводом. Мы будем использовать функции этой библиотеки для получения ввода с клавиатуры и вывода данных в консоль. Буквы io в iostream означают «input/output» (ввод/вывод).

Чтобы использовать функции, определенные в библиотеке iostream , нам нужно включить заголовочный файл iostream в начало любого исходного файла, который использует содержимое, определенное в iostream , например:

#include // остальной код использует функциональность iostream

std::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: 5

std::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::cout 
Hi! 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) для публикации комментария требуется время на премодерацию.

Присоединяйтесь к нам во ВКонтакте!

  • Антенны и распространение радиоволн
  • Беспроводная связь
  • Высокочастотная техника
  • Волоконно-оптические линии связи (ВОЛС)
  • Измерительная техника
  • Исполнительные механизмы и драйверы
  • САПР
  • Спутниковая связь
  • Схемотехника
  • Телевидение
  • Цифровая электроника
  • Технологии и инструменты
  • Электронные компоненты
  • А что внутри?
  • Прочее (радиоэлектроника)
  • Алгоритмы и структуры данных
  • Базы данных
  • Веб-разработка
  • Мультимедиа (разработка ПО)
  • Нейронные сети
  • Паттерны проектирования
  • Связь
  • Системы сборки ПО
  • Языки программирования
  • Компьютерные сети
  • Операционные системы
  • Верстка
  • Системы контроля версий
  • История технологий
  • Мультимедиа
  • Новости телекома
  • Нормативная документация
  • Охрана труда
  • Полезные программы
  • Просто интересно
  • Экономика телекоммуникаций и электронной промышленности
  • Экономика и инвестиции

Мы в соцсетях

cin.get() и его друзья

определенная в классе istream библиотеки по определению извлекает из входного потока один символ и возвращает его целочисленный код. Популярность ей принес тот факт, что ее удобно использовать в программах с консольным интерфейсом, которые запускаются не из консоли, например, из проводника или из графического интерфейса IDE. После завершения работы программы мы не сможем увидеть ее финальный вывод, поскольку выполнится инструкция return и программа завершится, закрывая «за собой» консольное окно.

Функция get() же стандартного потока ввода cin заставляет систему ожидать ввода пользователем любого символа, который она считывает, и программа завершается.

Проблема в том, что работает cin.get() далеко не всегда. Почему? Рассмотрим ситуацию издалека.

Начнем с того, что же такое поток (stream). Ненаучным языком говоря, поток — последовательность символов. Источником символов может служить в частности клавиатура. Символы идут один за другим:

К ним возможен только последовательный доступ, но не произвольный, иными словами, чтобы извлечь из потока символ d , надо предварительно извлечь из него a , b и c . Извлеченный (прочитанный) символ удаляется из потока.

Надо сказать, что если по каким-то причинам из потока прочитаны не все символы до конца строки (символа '\n' ) включительно, то после операции чтения поток не будет пустым. Два самых распространенных способа дают нам два хороших примера.

Уже рассматривавшаяся выше функция get() читает из потока один символ, так что если мы ввели несколько символов, то она оставит за собой непустой поток. И следующий вызов cin.get() будет обречен на «фиаско»: программа вместо того, чтобы остановиться и ждать пользовательского ввода, прочитает из входного потока очередной символ, оставшийся от предыдущего ввода, и продолжит свое выполнение. Или завершится «без спроса». Напомню, что get() возвращает приведенный к типу int код введенного символа, поэтому мы может использовать его в вышеприведенной инструкции — код просто будет выведен на экран.

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

2)
int a;
cin>>a;

Перегруженный оператор сдвига, использующийся для ввода данных из потока, который в свою очередь перегружен для работы с целыми числами (так как вызван с параметром a типа int ), считывает символы, являющиеся десятичными цифрами, до тех пор, пока не встретит нецифровой символ. Это может быть пробел, буква, табуляция, конец строки, и так далее.
Все эти символы остались в потоке. Даже если вы просто ввели число и нажали Enter, символ '\n' остался в потоке.

На него и «нарывается» впоследствии cin.get() .

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

Она выведет символ, на котором «споткнулся» cin.get() .

using namespace std;

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

1)
Функция

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

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

2)
streambuf* istream::rdbuf() const;
streamsize streambuf::in_avail();

У потока ввода есть буфер чтения, в котором он хранит символы. Мы обращаемся к нему, вызывая функцию rdbuf() . А любой уважающий себя буфер знает, сколько символов в нем содержится. Поскольку и мы хотим это узнать, мы вызываем функцию in_avail() этого буфера. Это количество символов нам и нужно проигнорировать, что достигается так:

cin.ignore(cin.rdbuf()->in_avail());

Второй параметр функции ignore() имеет значение по умолчанию, что делает его необязательным, и мы его просто опускаем при вызове.

3)
int istream::sync();

Использование функции sync() — путь наименьшего сопротивления. Она просто очищает поток от имеющихся в нем символов.

Почему этот способ самый сложный — поищите в Гугле (если есть желание). А я в это время порекомендую Вам выбрать более понравившийся из первых двух и пойду заниматься более полезными делами ��

Хотя нет, напоследок еще расскажу о функции

void ios::clear(iostate state = goodbit);

Эта функция восстанавливает поток, если он по какой-либо причине оказался в ошибочном состоянии. Например, из потока пытались прочитать число, а там в это время находились буквы. В этом случае, поток переводится в состояние отказа, и дальнейшие операции с ним неосуществимы. В том числе и cin.get() . Функция же clear() «очищает» состояние потока, делая его вновь веселым и работоспособным.

На закуску пример и ссылки.

Для чего нужен cin в c

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

Ввод-вывод данных в языке программирования С++. Как и в большинстве C-подобных языках, в С++ отсутствуют встроенные средства ввода-вывода данных. Именно для этой цели в С++ существует библиотека iostream, для ее подключения используется строка #include .

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

cout (выходной поток)
cin (входной поток)
cerr (поток вывода сообщений об ошибках)

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

Вывод данных.

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

Конечная запись имеет вид :int a;cout

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

Ввод данных имеет следующий вид: сначало идет входной поток cin , после чего поразрядная операция >> и само значение.Конечная запись выглядит так:

Так же есть возможность многократного назначения , выглядит так:

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

В таком случае результат выполнения выглядит так:

Манипулятор getline() нужен для ввода текста до символа перевода строки. Пример:

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

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

Наглядный пример не большой программы ввода-вывода значения переменной:

Далее давайте рассмотрим пример форматированного вывода информации.

Сейчас мы рассмотрели ввод-вывод данных в C++.

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

Рубрики

  • C++ (27)
    • STL (2)
    • Арифметические операции (1)
    • Ввод-вывод (1)
    • Дополнительная информация (1)
    • Задачи (2)
    • Массивы (1)
    • Сортировки (2)
    • Типы данных (1)
    • Условные операторы (1)
    • Циклы (1)
    • Задачи читателей (6)
    • Одномерные массивы (2)
    • Простые операции (10)
    • Символьные строки (1)
    • Сортировка (3)
    • Типы данных (1)
    • Условные операторы (3)
    • Циклы (5)
    • Поисковая оптимизация для интернет-магазинов (25)

    Создание и продвижение интернет-магазинов. Предприниматель и автор книг Артур Мазитов.
    ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "ГРУППА КОМПАНИЙ ПРАВО И ЗАЩИТА" ООО "ГКПЗ" ИНН 0275927223, ОГРН 1220200003561 |
    2014 © Copyright Все права защищены

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

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