Независимый регистратор сервер недоступен

Содержание

Почему вам не обойтись без «Независимого регистратора»

иллюстратор — Маргарита Федосеева

Что такое «Независимый регистратор»

Это программа, которая фиксирует действия участников закупок во время работы на электронной торговой площадке (ЭТП) и сайте Единой информационной системы (ЕИС). Плагин подключается к браузеру и работает только в нем.

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

Заказчик или поставщик может использовать «Независимый регистратор», когда участвует:

  • во всех закупках по 44-ФЗ,
  • в конкурсе или аукционе по 223-ФЗ.

Какие действия фиксирует «Независимый регистратор»

В своем постановлении правительство утвердило список действий, которые фиксирует ГИС. «Независимый регистратор» сохранит данные о том, как участники закупок:

  • проходят аккредитацию на ЭТП;
  • подают и отзывают заявки на участие или ценовые предложения;
  • подают сведения о соответствии дополнительным требованиям;
  • отправляют запросы на разъяснение;
  • размещают разъяснения, оповещения или уведомления;
  • размещают протоколы закупки;
  • предоставляют банковскую гарантию;
  • вносят изменения в контракт;
  • подписывают контракт.

Также программа собирает сведения о том, когда ЭТП:

  • направляет запрос на установку или снятие блокировки денег на обеспечение заявки.
  • предоставляет заказчику информацию и документы участника закупки, например, копии учредительных документов или ИНН.

Для чего нужен «Независимый регистратор»

Доказать сговор или мошенничество

«Независимый регистратор» поможет участнику закупки доказать свою правоту при подаче жалобы в ФАС.

Например, заказчик вступил в сговор с одним из сотрудников ЭТП. Во время подачи ценовых предложений этот сотрудник заблокировал IP-адрес одного из поставщиков. Поставщик не смог войти в личный кабинет и пропустил подачу предложений. Чтобы доказать, что ему помешали участвовать в аукционе, поставщик отправил жалобу в ФАС.

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

Теперь сотруднику ФАС достаточно запросить данные «Независимого регистратора». Он просмотрит запись экрана и увидит, что поставщика действительно заблокировали.

Доказать сбой в работе ЭТП или ЕИС

Иногда поставщики и заказчики не могут участвовать в закупке из-за сбоев в работе ЭТП или ЕИС. Программа поможет и в этом случае: она постоянно мониторит эти сайты и автоматически передает результаты мониторинга в ФАС.

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

Например, поставщик просрочил подписание контракта, и заказчик передал сведения об этом в антимонопольную службу. ФАС назначила комиссию. На этой комиссии поставщик заявил, что не мог подписать контракт, потому что документ не отображался в личном кабинете площадки. Сотрудник ФАС запросил данные «Независимого регистратора» у ЭТП. Из этих данных он узнал, что поставщик вообще не заходил в личный кабинет в те дни, когда нужно было подписать контракт. ФАС вынес решение внести поставщика в РНП.

Обязательно ли устанавливать «Независимый регистратор»

Правительство сделало установку программы добровольной: каждый участник закупки сам решает, нужен ли ему «Независимый регистратор».

Однако без этой программы заказчик или поставщик не сможет доказать, что в какой-то момент ЭТП была недоступна. В письме от 25 февраля 2019 года антимонопольная служба заявила, что скриншоты — снимки экрана — не могут быть достоверным доказательством технических неполадок на ЭТП. Поэтому, если снимок экрана или видеозапись были сделаны без помощи «Независимого регистратора», ФАС признает жалобу необоснованной.

Единственная возможность доказать свою правоту без данных «Независимого регистратора» — предоставить скриншоты или видео с протоколом осмотра сайта, который подтвержден нотариусом. Эти видеозаписи или снимки должны быть сделаны в то же время, когда на площадке были неполадки.

Чтобы не приглашать нотариуса каждый раз, когда нужно совершить какое-то действие на площадке, и создан «Независимый регистратор». Достаточно один раз установить программу на компьютер, и в случае неполадок на ЭТП участник закупки сможет легко это доказать.

Как установить «Независимый регистратор» на компьютер

Установить «Независимый регистратор» на компьютер может любой пользователь. Чтобы сделать это, он должен:

  1. Скачать установочный файл на сайте ЕИС. Кроме файла установки, на сайте можно найти руководство по установке и использованию программы, а также ответы на часто задаваемые вопросы.

  2. Вставить в компьютер токен с электронной подписью (ЭП) и закрыть окно браузера.

  3. Проверить настройки антивируса и файрвола: в них не должно быть ограничений на установку приложений.

  4. Запустить файл setup.exe и следовать инструкциям мастера установки.

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

Начало работы с программой

Программа может работать, только если пользователь находится в ЕИС или на одном из сайтов ЭТП. Чтобы включить запись видео, нужно нажать одноименную кнопку на панели инструментов.

Отключить запись можно при помощи кнопки «Остановить запись». Также в программе есть функция автоматического отключения: регистратор остановит запись, если пользователь будет неактивен определенное время.

ВАЖНО!

​Обратите внимание, что видеозапись не остановится, если вы свернете окно браузера. Чтобы личная информация не попала на видеозапись, нужно выключить запись экрана или закрыть ЕИС или ЭТП.

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

  • Индикатор времени. Показывает, правильно ли настроено время на вашем компьютере.
  • Индикатор интернет-подключения. Показывает, подключен ли компьютер к интернету.
  • Индикатор площадки. Показывает, доступен ли в данный момент сайт ЕИС или ЭП.
  • Индикатор подписи. Показывает, соответствуют ли характеристики электронной подписи (ЭП) цепочке сертификатов.

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

Как передать видеозапись в ФАС

Все видеозаписи и данные о действиях пользователя «Независимый регистратор» хранит на жестком диске компьютера. Данные о действиях программа отправляет в ФАС автоматически, а видео должен отправлять сам пользователь. Сделать это можно двумя путями:

  1. Отправить файл на сервер.

В этом случае программа отправит запись с компьютера на сервер «Независимого регистратора» через интернет. С этого сервера запись автоматически попадет в ФАС. При этом программа может передавать запись на сервер, только если в компьютер установлен токен с ЭП. Поэтому нельзя извлекать токен во время передачи файлов.

  1. Передать файл на флеш-носителе.

Программа сохранит запись на флеш-накопителе, который можно будет передать в ФАС лично вместе с другими материалами.

ВАЖНО!

Чтобы не перегружать сервера «Независимого регистратора», программа хранит видеозаписи на жестком диске компьютера пользователя. При этом пользователь сам должен установить ограничение объема всех записей. Как только лимит будет превышен, программа безвозвратно удалит старые записи, чтобы сохранить новые. Чтобы не потерять важные данные, нужно периодически выгружать файлы с диска: отправлять их на сервер или сохранять на флеш-носителе.

Преимущества использования «Независимого регистратора»

Участники закупки могут аргументировать свою правоту

Раньше у закупщиков и поставщиков было меньше возможностей доказать свои слова в суде. Сейчас они могут это сделать при помощи данных «Независимого регистратора».

Программа предотвращает мошенничество во время закупок

Программа контролирует все этапы закупки и делает участие в торгах «прозрачным». Благодаря ее работе сократилось количество мошеннических действий — ведь доказать их стало намного проще.

Данные регистратора нельзя подделать

Все данные, которые получает регистратор, шифруются открытым ключом электронной подписи. Расшифровать их может только сотрудник ФАС.

«Независимый регистратор» — это удобный и простой в работе инструмент, который защищает права всех участников закупки. Если в процедуре закупки были нарушения или на сайте ЕИС или ЭТП были сбои, заказчик или поставщик легко смогут доказать это при помощи данных регистратора.

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

Программа “Независимый регистратор” с сайта www.zakupki.gov.ru

Здравствуйте, уважаемый(ая) коллега! Во время проведения электронного аукциона на электронной площадке могут возникнуть различные технические неполадки. Например, у участника пропадет возможность подавать ценовые предложения или он не сможет войти в аукционный зал. На практике это встречается крайне редко, но все же встречается. И если у участника отсутствует запись экрана или нет скриншотов того, что происходило во время проведения аукциона, то доказать в ФАС вину оператора площадки будет весьма проблематично.

Раньше видеозаписи и снимки экрана приходилось делать различными программными средствами. Однако в настоящее время для этих целей появилось специализированное программное обеспечение, которое называется “Независимый регистратор”. Более подробно об этом ПО и его возможностях мы поговорим ниже в настоящей статье.

1. Краткая справка
2. Что такое “Независимый регистратор” и для чего он нужен?
4. Параметры системы необходимые для установки ПО “Независимый регистратор”

1. Краткая справка

Конкурс Минкомсвязи на развитие системы “Независимый регистратор” в 2013 г. выиграло ФГУП НИИ «Восход» с ценовым предложением 119,5 миллиона рублей при начальной (максимальной) цене контракта 133 миллиона рублей. Стоит отметить, что ФГУП НИИ «Восход» было единственным участником, подавшим заявку. Разработка системы велась с нуля и базировалась на программном обеспечении российского производства.

Согласно Приказу Минкомсвязи России № 398 от 18.11.2014 г. система «Независимый регистратор» была введена в промышленную эксплуатацию с 27 ноября 2014 на всех 5-ти государственных электронных площадках.

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

2. Что такое “Независимый регистратор” и для чего он нужен?

Информационная система “Независимый регистратор” (ИС “Независимый регистратор”) предназначена для независимого сбора, протоколирования, хранения, контроля и аудита информации в процессе проведения электронных аукционов на электронных площадках и юридически значимых действий при размещении информации в Единой информационной системе (ЕИС).

Программное обеспечение “Независимый регистратор” (ПО “Независимый регистратор”) является встраиваемым в браузер Internet Explorer модулем (плагином). Данный программный модуль предназначен для видеофиксации действий пользователя, осуществляемых на электронных площадках и ЕИС.

Записи, получаемые при работе на электронных площадках, отправляются в зашифрованном виде и могут быть расшифрованы только по запросу сотрудника ФАС России, в случае поступления жалобы в ФАС России относительно оспариваемого события. Т.е. одна копия файла остается на жестком диске компьютера, а вторая отправляется на сервер «Независимого регистратора».

Отправка записей, получаемых при работе на сайте ЕИС, не производится, такие записи пользователь самостоятельно предоставляет в ФАС России на переносном носителе информации.

Схема работы Независимого регистратора представлена на рисунке ниже.

Такие видеозаписи позволяют однозначно выявить факт таких нарушений, как неправомерное блокирование доступа к аукциону, намеренное ограничение или скрытие функционала оператором электронной площадки и сайта ЕИС, сбои в работе площадки и сайта ЕИС.

Эта система была разработана для того, чтобы собирать достоверную информацию обо всех действиях участников торгов, Заказчиков и операторов электронной площадки. Независимый регистратор является незаменимым помощником в случаях выявления нарушений на аукционах, проводимых в интернете.

Важный момент! Фиксации подлежит полный экран компьютера пользователя, включая панель задач и системное время. Во избежание недоразумений во время работы программы не следует демонстрировать на экране вашего компьютера информацию личного характера, не имеющую отношения к работе на электронной площадке или ЕИС.

3. Как скачать и установить “Независимый регистратор» на свой компьютер?

Скачать установочный файл, а также руководство по установке и использованию ПО можно с официального сайта Единой информационной системы (ЕИС). Для этого вам необходимо зайти на главную страницу сайта http://zakupki.gov.ru/ и в левом вертикальном меню выбрать раздел “Документы”.

Затем на появившейся странице в левой колонке найти пункт “Технорабочие материалы” и кликнуть левой кнопкой мыши по галочке, расположенной слева от этого пункта. Из выпадающего списка вам необходимо выбрать подпункт “Независимый регистратор” и кликнуть по нему.

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

Также вы можете скачать эти файлы по ссылкам, расположенным ниже:

  1. Установочный файл в формате zip (13,57 Мб) —
  2. Руководство по установке и использованию в формате pdf (812,33 Кб) —

4. Параметры системы необходимые для установки ПО “Независимый регистратор”

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

  • браузер Microsoft Internet Explorer версии 8.0 или выше;
  • в браузере Microsoft Internet Explorer отсутствуют или выключены иные плагины, кроме Capicom;
  • версия OC Windows XP Service Pack 2 (SP2) и выше;
  • установлена программа системы криптографической защиты, работающая по алгоритму ГОСТ;
  • установлен Capicom;
  • свободного места на диске не менее 500 МБ;
  • открыто сетевое разрешение для IP-адреса 85.143.127.170;
  • вставлен флеш-накопитель с сертификатом, выданным аккредитованным удостоверяющим центром;
  • установлен корневой сертификат удостоверяющего центра, которым выдана электронная цифровая подпись;
  • установлен пользовательский сертификат;
  • открыто разрешение в антивирусах, фаерволах и прочих системах защиты на использование дополнительных надстроек.

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

На этом моя статья подошла к концу. Надеюсь, что информация была для вас полезной. Желаю вам удачи и до встречи в следующих статьях.

P.S.: Если вам понравилась статья, то ставьте лайки и делитесь ссылками на статью со своими друзьями и коллегами в социальных сетях.

ПРОГРАММНЫЙ МОДУЛЬ «НЕЗАВИСИМЫЙ РЕГИСТРАТОР» Руководство по установке и использованию

Транскрипт

1 ПРОГРАММНЫЙ МОДУЛЬ «НЕЗАВИСИМЫЙ РЕГИСТРАТОР» Руководство по установке и использованию Москва, 2014 г.

2 Оглавление Назначение и описание ПО… 3 Установка… 3 Использование… 6 Нештатные ситуации Служба поддержки

3 Назначение и описание ПО Информационная система «Независимый регистратор» предназначена для независимого сбора, протоколирования, хранения, контроля и аудита информации в процессе проведения электронных аукционов на электронных площадках, отобранных в соответствии с требованиями законодательства Российской Федерации о размещении заказов, и юридически значимых действий при размещении информации на официальном сайте Российской Федерации в сети Интернет для размещения информации о размещении заказов на поставки товаров, выполнение работ, оказание услуг (далее Официальный сайт, ООС), в целях исполнения полномочий контролирующими органами в соответствии с требованиями законодательства Российской Федерации. Настоящее программное обеспечение (ПО) является встраиваемым в браузер Internet Explorer модулем (плагином). Данный программный модуль предназначен для видеофиксации действий пользователя, осуществляемых на электронных площадках. Получаемые записи отправляются в зашифрованном виде и могут быть расшифрованы только по запросу сотрудника ФАС России, в случае поступления жалобы в ФАС России относительно оспариваемого события. Видеозаписи позволяют однозначно выявить факт таких нарушений, как неправомерное блокирование доступа к аукциону, намеренное ограничение или скрытие функционала оператором электронной площадки, сбои в работе площадки и пр. Важно: фиксации подлежит полный экран компьютера пользователя, включая панель задач и системное время. Во избежание недоразумений во время работы модуля не следует демонстрировать на экране вашего компьютера информацию личного характера, не имеющую отношения к работе на электронной площадке. Установка Перед установкой программного модуля «Независимый регистратор» на локальном компьютере необходимо проверить следующие настройки рабочего места, технические и программные характеристики ПК пользователя: браузер Microsoft Internet Explorer версии 8.0 или выше; в браузере Microsoft Internet Explorer отсутствуют или выключены иные плагины, кроме Capicom; версия OC Windows XP Service Pack 2 (SP2) и выше; установлена программа системы криптографической защиты Крипто Про; установлен Capicom; свободного места на диске не менее 500 МБ; открыто сетевое разрешение для IP-адреса ; 3

4 вставлен флеш-накопитель с сертификатом, выданным аккредитованным удостоверяющим центром; установлен корневой сертификат удостоверяющего центра, которым выдана электронная цифровая подпись; установлен пользовательский сертификат; открыто разрешение в антивирусах, фаерволах и прочих системах защиты на использование дополнительных надстроек. Прежде чем приступить к установке программного модуля, браузер Internet Explorer необходимо закрыть, если он в настоящий момент используется. Для того, чтобы установить программное обеспечение, необходимо запустить файл setup.exe и следовать отображаемым инструкциям (рис. 1). Рис. 1. Мастер установки программного модуля «Независимый регистратор» Последний шаг мастера установки представлен на рис. 2. 4

5 Рис. 2. Последний шаг мастера установки программного модуля «Независимый регистратор» После того, как программное обеспечение было успешно установлено, запустите браузер Internet Explorer. Программный модуль установлен корректно, если в окне браузера появилась дополнительная панель инструментов (рис. 3). Рис. 3. Программный модуль «Независимый регистратор» успешно встроен в Internet Explorer 5

6 Использование Кнопка программного модуля «Включить» доступна только при нахождении на странице одной из электронных площадок (рис. 4). Рис. 4. Рабочее место пользователя При входе в личный кабинет электронной площадки, плагин автоматически переключается в активный режим, аналогично — при выходе из личного кабинета электронной площадки плагин автоматически становится неактивным. Принудительное включение и выключение плагина доступно по кнопке (см. рис. 5) и может быть использовано для записи информации открытой части электронной площадки. Запись содержимого экрана не производится, если: пользователь находится в открытой части Электронной площадки при этом плагин Независимого регистратора не активирован (по кнопке «Включить»); пользователь не находится на сайте Электронной площадки. Важно: в случае, если пользователь находится на сайте Электронной площадки и плагин Независимого регистратора активен, при этом окно браузера свернуто и/или на экране осуществляется работа в других программах и приложениях, записывается все, что отражено на экране вашего компьютера. Чтобы этого не происходило, необходимо при работе с плагином Независимого регистратора не открывать иные окна (сайты, личную почту и т.д), либо отключать работу плагина. Рис. 5. Кнопка «Включить» расположена на панели инструментов модуля На панели инструментов модуля располагаются основные индикаторы, свидетельствующие о наличии интернет-подключения на локальном компьютере 6

7 пользователя (индикатор «Интернет»), доступности сайта электронной площадки в текущий момент времени (индикатор «Доступность площадки»), о соответствии характеристик установленного браузера, Capicom, КриптоПро, операционной системы, электронной подписи (индикатор «Рабочее место») требуемым, а также правильной настройке времени на локальном компьютере (индикатор ). Красная индикация свидетельствует о неуспешной проверке соответствующего параметра. Значок «Восклицательный знак» информирует о некорректной настройке или отсутствии требуемого компонента. В этом случае пояснение можно получить, наведя на данный значок курсором мыши (рис. 6). Рис. 6. Всплывающая подсказка при наведении на значок «Восклицательный знак» Раздел «Настройки» позволяет явно указать занимаемый на локальном компьютере пользователя общий размер файлов записи, ожидающих передачи на сервер (рис. 7). Нажатие на кнопку «Показать видео-файлы» приведет к открытию соответствующей папки на локальном компьютере, в которой хранятся данные модуля. По умолчанию видеозаписи пользователя сохраняются в папку: C:\Users\Username\AppData\Local\Microsoft\Windows\INetCache\Low\video. Рис. 7. Настройка ограничения размера хранимых данных Фактически переданный объем файлов по отношению к ожидающему отображается в левом углу панели инструментов модуля (рис. 8). Рис. 8. Индикатор отправки файлов на сервер 7

8 Также в разделе настроек модуля существует возможность указать максимальное значение времени неактивности пользовательских действий на электронной площадке, по истечении которого программный модуль будет автоматически выключен (рис. 9). Рис. 9. Настройка времени неактивности для автоотключения модуля Закрытие панели инструментов модуля (рис. 10) приведет к открытию диалогового окна об отключении данной панели инструментов (рис. 11). Рис. 10. Закрытие панели программного модуля Рис. 11. Диалоговое окно «Отключение надстройки Inernet Explorer» В случае прекращения доступа к сертификату (по причине извлечения флеш-накопителя) отправка фиксируемых данных на сервер приостанавливается и возобновляется только в момент возобновления доступа к сертификату. 8

9 Важно: В случае необходимости, например, при отсутствии Интернет-соединения, либо низкой пропускной способности каналов связи, существует возможность экспортировать записи из папок временного хранения данных плагина жесткого диска вашего компьютера на переносной носитель информации. Для этого нажмите на кнопку «Экспорт» (Рис. 7) в разделе плагина «Настройки» — произойдет открытие диалогового окна для сохранения видео на локальный компьютер. Чтобы сохранить видео, необходимо выбрать папку на локальном компьютере и нажать кнопку «Сохранить». Таким образом, для защиты своих прав, видео, сохраненное на переносном носителе (диск, флешка), предприниматели смогут при рассмотрении жалобы самостоятельно представить в ФАС России. Обращаем внимание, что объем сохраняемого видео на жестком диске вашего компьютера зависит от того, какой объем вы установили в настройках плагина Независимого регистратора для сохранения видео на вашем компьютере (см. рис. 7). При этом данный объем памяти на вашем компьютере сохраняет последние события, в течение установленного вами времени, стирая предыдущие события. 9

10 Нештатные ситуации Возможны следующие нештатные ситуации: 1. Все кнопки программного модуля заблокированы (неактивны). Убедитесь, что вы находитесь на странице открытой части одной из электронных площадок. Открытая часть электронной площадки это информационное пространство электронной площадки, для просмотра которого не требуется указание входных данных пользователя (логина и пароля). В случае, если все кнопки программного модуля неактивны при выполнении вышеуказанного условия, это может свидетельствовать о недоступности сервера системы «Независимой регистратор» или наличии конфликта в сетевых настройках. Для разрешения данной ситуации необходимо обратиться в службу технической поддержки продукта. 2. После установки программного модуля в Internet Explorer не была добавлена новая панель инструментов, которая отображена на рис. 3. a) Если после установки модуля соответствующая панель инструментов в браузере Internet Explorer не отображается, необходимо включить ее в настройках панелей инструментов и расширений Internet Explorer самостоятельно. Инструкции для включения программного модуля «Независимый регистратор» для различных версий браузера Internet Explorer располагаются ниже. Internet Explorer 8: Сервис > Панели инструментов > Независимый регистратор. Internet Explorer 9, 10, 11: Щелчок правой клавишей мыши по кнопке «Сервис» > Независимый регистратор. b) В браузере Internet Explorer 11 в настройках панелей инструментов и расширений состояние надстройки Независимый регистратор — «Несовместима». В этом случае необходимо выполнить следующие действия: В меню браузера «Сервис» — пункт «Свойства браузера» — вкладка «Дополнительно»: снять флаг «Включить расширенный защищенный режим», после чего перезагрузить компьютер. 3. Отображается индикатор недоступности электронной площадки. В случае если на панели инструментов плагина отображается индикатор недоступности электронной площадки, в качестве первой меры диагностирования проблемы необходимо подключиться к сети Интернет посредством другого провайдера услуг подключения к сети. В случае если проблема сохраняется, обратитесь в Службу поддержки. 10

11 Служба поддержки При возникновении проблем или вопросов, связанных с работой плагина, обращайтесь на Официальный сайт Российской Федерации — zakupki.gov.ru. Контактная информация представителей Официального сайта Российской Федерации находится в разделе «Техническая поддержка» Официального сайта Российской Федерации. 11

Урок №72. Обработка некорректного пользовательского ввода

Большинство программ, имеющих хоть какой-либо пользовательский интерфейс, сталкиваются с обработкой пользовательского ввода. В программах, которые мы писали раньше, используется std::cin для получения пользовательского ввода. А так как ввод данных имеет свободную форму (пользователь может ввести всё, что пожелает), то пользователю очень легко ввести данные, которые от него никак не ожидаются.

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

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

std::cin, буфер данных и извлечение

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

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

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

При использовании оператора извлечения, выполняется следующая процедура:

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

Если во входном буфере нет данных, то пользователю предлагается ввести данные (обычно именно это и происходит в большинстве случаев). Когда пользователь нажимает Enter, символ новой строки \n помещается во входной буфер.

Оператор >> извлекает столько данных из входного буфера в переменную, сколько позволяет размер самой переменной (игнорируя любые пробелы, табы или \n).

Любые данные, которые не были извлечены, остаются во входном буфере для последующего извлечения.

Извлечение данных считается успешным, если, по крайней мере, один символ был извлечён из входного буфера. Оставшиеся данные во входном буфере используются для последующих извлечений. Например:

1 2 int a; std::cin >> a;

Если пользователь введёт 7d, то 7 будет извлечено, преобразовано в целое число и присвоено переменной a. А d\n останется во входном буфере дожидаться следующего извлечения.

Извлечение не выполняется, если данные ввода не соответствуют типу переменной, выделенной для них. Например:

1 2 int a; std::cin >> a;

Если бы пользователь ввёл z, то извлечение не выполнилось бы, так как z не может быть извлечено в целочисленную переменную.

Проверка пользовательского ввода

Существует три основных способа проверки пользовательского ввода:

До ввода

Предотвращение некорректного пользовательского ввода.

После ввода

Пользователь может вводить всё, что хочет, но осуществляется последующая проверка данных. Если проверка прошла успешно, то выполняется перемещение данных в переменную.

Пользователь может вводить всё, что хочет, но при операции извлечения данных оператором >> параллельно выполняются решения возможных ошибок.

Некоторые графические пользовательские интерфейсы или расширенные текстовые интерфейсы позволяют проверять ввод пользователя сразу (символ за символом). Программист создаёт функцию проверки данных, которая принимает и проверяет пользовательский ввод, и, если данные ввода корректны, то возвращается true, если нет, то false. Эта функция вызывается каждый раз, когда пользователь нажимает на клавишу. Если функция проверки возвращает true, то символ, который пользователь ввёл — принимается. Если функция возвращает false, то символ, который только что ввёл пользователь — отбрасывается (и не отображается на экране). Используя этот метод, мы можем гарантировать, что любой пользовательский ввод будет корректным, так как любые неверные нажатия клавиш будут обнаружены и немедленно удалены. К сожалению, std::cin не поддерживает этот тип проверки.

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

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

Рассмотрим следующую программу «Калькулятор», которая не имеет обработки ошибок:

Здесь мы просим пользователя ввести два числа и арифметический оператор. Результат выполнения программы выше:

Enter a double value: 4
Enter one of the following: +, -, *, or /: *
Enter a double value: 5
4 * 5 is 20

Теперь рассмотрим, где некорректный ввод пользователя может привести к сбою в программе.

Сначала мы просим пользователя ввести первое число. А что будет, если он введёт что-либо другое (например, q)? В этом случае извлечение данных не произойдёт.

Во-вторых, мы просим пользователя ввести один из четырёх возможных символов (арифметических операторов). Что будет, если он введёт какой-то другой символ? Мы сможем извлечь данные, но не сможем их обработать.

В-третьих, что будет, если пользователь вместо символа введёт строку, например, *q hello. Хотя мы можем извлечь символ *, но в буфере останется лишний балласт, который в будущем может привести к проблемам.

Основные типы некорректного пользовательского ввода

Мы выделили 4 типа:

Извлечение выполняется успешно, но значения бесполезны для программы (например, вместо математического оператора введён символ k).

Извлечение выполняется успешно, но пользователь вводит лишний текст (например, *q hello вместо одного символа математического оператора).

Извлечение не выполняется (например, вместо числового значения ввели символ q).

Извлечение выполняется успешно, но пользователь ввёл слишком большое значение.

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

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

Ошибка №1: Извлечение выполняется успешно, но данные бесполезны

Это самый простой случай. Рассмотрим следующий фрагмент выполнения программы выше:

Enter a double value: 4
Enter one of the following: +, -, *, or /: k
Enter a double value: 5

Здесь мы просим пользователя ввести один из четырёх арифметических операторов, но он вводит k. Символ k является допустимым символом, поэтому std::cin извлекает его в переменную sm, и это всё добро возвращается обратно в функцию main(). Но в программе не предусмотрен случай обработки подобного ввода, поэтому мы получаем сбой и в результате ничего не выводится.

Решение простое: выполнить проверку пользовательского ввода. Обычно она состоит из трёх шагов:

Проверить пользовательский ввод на ожидаемые значения.

Если совпадает, то значения благополучно возвращаются.

Если нет, то сообщаем пользователю что что-то пошло не так, и просим повторить ввод снова.

Вот обновлённая функция getOperator() с проверкой пользовательского ввода:

Мы используем цикл while для гарантирования корректного ввода. Если пользователь введёт один из ожидаемых символов, то всё хорошо — символ возвратиться обратно в функцию main(), если нет, то пользователю выведется просьба повторить ввод снова. И вводить данные он будет до тех пор, пока не введёт корректное значение, не закроет программу или не уничтожит компьютер 🙂

Ошибка №2: Извлечение выполняется успешно, но пользователь вводит лишний текст

Рассмотрим следующее выполнение программы «Калькулятор»:

Enter a double value: 4*5

Как вы думаете, что произойдёт дальше?

Enter a double value: 4*5
Enter one of the following: +, -, *, or /: Enter a double value: 4 * 5 is 20

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

Когда пользователь вводит 4*5, то эти данные поступают в буфер. Затем оператор >> извлекает 4 в переменную a, оставляя *5\n в буфере. Затем программа выводит Enter one of the following: +, -, *, or /:. Однако, когда вызывается оператор извлечения, он видит, что в буфере находится *5\n, поэтому он использует эти данные, вместо того, чтобы запрашивать их у пользователя ещё раз. Следовательно, извлекается символ *, а 5\n остаётся во входном буфере.

После того, как пользователя просят ввести другое число, 5 извлекается из буфера, не дожидаясь ответа от пользователя. Поскольку у пользователя не было возможности ввести другие значения и нажать Enter (вставляя символ новой строки), то всё происходит на одной строке.

Хотя результат программы правильный, но её выполнение — нет. Было бы намного лучше, если бы лишние символы можно было бы просто проигнорировать. К счастью, это можно сделать следующим образом:

Поскольку последний символ, введенный пользователем, должен быть \n (так как пользователь в конце ввода нажимает Enter), то мы можем сообщить std::cin игнорировать все символы в буфере до тех пор, пока не будет найден символ новой строки (который мы также удалим). Таким образом, всё лишнее будет успешно проигнорировано.

Обновим нашу функцию getDouble(), добавив эту строчку:

Теперь наша программа будет работать так, как надо, даже если мы введём 4*5 в первой строке. Число 4 будет извлечено в переменную, а все остальные символы будут удалены из входного буфера. Поскольку входной буфер теперь пуст, то при последующем выполнении операции извлечения всё пройдет гладко и порядок выполнения программы не будет нарушен.

Ошибка №3: Извлечение не выполняется

Рассмотрим следующее выполнение программы «Калькулятор»:

Enter a double value: a

Теперь уже не удивительно, что программа работает не так, как надо, но её дальнейший ход выполнения — вот что интересно:

Enter a double value: a
Enter one of the following: +, -, *, or /: Enter a double value:

И программа внезапно обрывается.

Этот случай похож на ошибку №2, но всё же несколько отличается. Давайте рассмотрим детальнее, что здесь происходит.

Когда пользователь вводит a, то этот символ помещается в буфер. Затем оператор >> пытается извлечь a в переменную a типа double. Поскольку a нельзя конвертировать в double, то оператор >> не может выполнить извлечение. На этом этапе случаются две вещи: a остаётся в буфере, а std::cin переходит в «режим отказа». Как только установлен этот режим, то все последующие запросы на извлечение данных будут проигнорированы.

К счастью, мы можем определить, удачное ли извлечение или нет. Если нет, то мы можем исправить ситуацию следующим образом:

Вот так! Теперь давайте интегрируем это в нашу функцию getValue():

Ошибка №4. Извлечение выполняется успешно, но пользователь ввёл слишком большое значение

Рассмотрим следующий код:

Что случится, если пользователь введёт слишком большое число (например, 40 000)?

Enter a number between -32768 and 32767: 40000
Enter another number between -32768 and 32767: The sum is: 32767

В примере выше std::cin немедленно перейдёт в «режим отказа», и значение не будет присвоено переменной x. Следовательно, x останется с инициализированным значением 32767. Все следующие данные ввода будут проигнорированы, а y останется с инициализированным значением 0. Решение такое же, как и в случае с неудачным извлечением (см. ошибка №3).

Объединяем всё вместе

Вот программа «Калькулятор», но уже с полным механизмом обработки/проверки ошибок:

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

Может ли извлечение не выполниться?

Может ли пользователь ввести значение больше ожидаемого?

Может ли пользователь ввести бессмысленные значения?

Может ли ввод пользователя привести к переполнению переменных?

Используйте ветвление if и логические переменные для проверки пользовательского ввода.

Следующий код осуществляет проверку пользовательского ввода и исправляет проблемы с переполнением или неудачным извлечением данных:

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