для чего нужны консольные приложения
Возможности консольных приложений для Windows
В настоящее время, когда у разработчиков программного обеспечения появляется всё больше возможностей для сознания приложений со сложным графическим интерфейсом, консольные приложения по-прежнему прочно удерживают свои позиции, даже в такой, казалось бы им среде, как современная операционная система Windows. Это объясняется в первую очередь простотой их исполнения и некоторыми специфическими особенностями консольных приложений, которые делают их в ряде случаев более подходящими для решения задачи, чем приложения с графическим интерфейсом. Один минус: выглядят такие приложения очень уныло и однообразно, как безликая серая масса букв и цифр на чёрном фоне окна консоли. Но не всё так безнадёжно, как может показаться на первый взгляд. В этой статье я попытаюсь дать несколько полезных рецептов расширения функциональности консольных приложений и придания их внешнему виду большей выразительности.
И так: начнём с заголовка окна консоли. При запуске программы в заголовке окна отображается полное имя файла, с которого было запущено приложение. Вместо имени файла, в заголовке окна можно указать любой другой текст: название приложения, например. Это делается с помощью функции SetConsoleTitle.
Далее рассмотрим проблему с выводом на консоль текста кириллицы. Практически каждому программисту когда-нибудь приходилось с этим сталкиваться. По сложившейся традиции, для вывода текста на консоль в большинстве примеров на C++ используются функции стандартной библиотеки, такие как printf или puts, которые работают с текстом в кодировке OEM, что соответствует кодовой странице 866 для русского языка. То же самое происходит при использовании потока вывода cout. Но проблема в том, что большинство текстовых редакторов для Windows работают с текстом в кодировке ANSI, что для русского языка соответствует кодовой странице 1251.
Как решить эту проблему? Проще всего использовать функции, которые записывают текст непосредственно в буфер консоли, а не в стандартный поток. Для этого нужно в программный код включить заголовочный файл CONIO.H и, вместо функций printf и puts, вызывать аналогичные функции _cprintf и _cputs.
Так они выглядят в коде на Visual C++:
Несложно написать и собственную процедуру вывода текста на консоль с использованием системной функции WriteConsole. Вот пример такой процедуры:
А вот так она используется:
Как вы уже наверно заметили, для перевода строки необходимо указывать последовательность из двух символов: «\r\n», в отличие от стандартного потока, где указывается лишь один символ ‘\n’. Но бывает и так, что нужно вывести текст именно через стандартный поток, чтобы его можно было перенаправить в текстовый файл или в другое консольное приложение. Для этого текст нужно перевести в другую кодировку с помощью функции CharToOem. Или использовать функцию WideCharToMultiByte с параметром CP_OEMCP, если ваш текст в кодировке UNICODE.
Размер буфера консоли по умолчанию равен 80х300, т.е. 300 строк по 80 символов каждая. Задать буферу консоли другой размер можно при помощи функции SetConsoleScreenBufferSize.
Атрибутами текста консоли являются: цвет символов и цвет заднего фона. Код атрибута соответствует числовому значению в диапазоне от 0x00 до 0x7F. Так выглядит таблица с числовыми значениями атрибутов текста в шестнадцатеричном коде:
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F |
30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E | 3F |
40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F |
50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 5A | 5B | 5C | 5D | 5E | 5F |
60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 6A | 6B | 6C | 6D | 6E | 6F |
70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 7A | 7B | 7C | 7D | 7E | 7F |
Функция SetConsoleTextAttribute задаёт выводимому тексту указанный атрибут. Для задания всему окну консоли указанных атрибутов применяется функция FillConsoleOutputAttribute.
Позиционирование текста (т.е. установка курсора на позицию с заданными координатами) производится с помощью функции SetConsoleCursorPosition.
Полный код моего примера в Visual C++ 2005 выглядит так:
Приведённый пример был создан в среде Visual C++ 2005 как проект Win32 Console Application.
В заключение хочу отметить, что возможности консольного интерфейса Windows отнюдь не исчерпываются теми функциями, которые были упомянуты в этой статье. Не было рассказано про получение и обработку сообщений от мыши, об использовании в консольных приложениях возможностей графического интерфейса Windows. Но об этом речь пойдёт в дальнейших публикациях.
Учебник. Создание простого консольного приложения C# в Visual Studio (часть 1 из 2)
Изучая этот учебник, вы создадите и запустите консольное приложение C# с помощью Visual Studio, а также ознакомитесь с некоторыми возможностями интегрированной среды разработки (IDE) Visual Studio. Этот учебник представляет собой первую часть серии, состоящей из двух частей.
Изучив это руководство, вы:
В рамках части 2 вы расширите это приложение, добавив дополнительные проекты, изучите методы отладки и будете использовать сторонние пакеты.
Предварительные требования
Необходимо установить Visual Studio.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
Создание проекта
Сначала создайте проект приложения C#. Для этого типа проекта уже имеются все нужные файлы шаблонов.
Откройте Visual Studio 2017.
В верхней строке меню последовательно выберите Файл > Создать > Проект. (Или нажмите CTRL+SHIFT+N).
Добавление рабочей нагрузки (необязательно)
Вариант 1: использование диалогового окна «Новый проект»
Выберите ссылку Открыть Visual Studio Installer в левой области диалогового окна Новый проект.
Вариант 2: использование меню «Сервис»
Закройте диалоговое окно Создать проект и в верхней строке меню выберите Сервис > Получить средства и компоненты.
Откройте Visual Studio и в начальном окне выберите Создать проект.
В окне Создание проекта выберите C# в списке языков. Затем выберите Windows в списке платформ и Консоль в списке типов проектов.
Применив фильтры по языку, платформе и типу проекта, выберите шаблон Консольное приложение и щелкните Далее.
Если шаблон Консольное приложение не отображается, выберите Установка других средств и компонентов.
Затем нажмите кнопку Изменить в Visual Studio Installer. Вам может быть предложено сохранить результаты работы; в таком случае сделайте это. Выберите Продолжить, чтобы установить рабочую нагрузку. После этого вернитесь к шагу 2 в процедуре Создание проекта.
В поле Имя проекта окна Настроить новый проект введите Calculator. Затем щелкните Далее.
В окне Дополнительные сведения для целевой платформы должна быть указана версия .NET Core 3.1. Если это не так, выберите .NET Core 3.1. Затем нажмите Создать.
Visual Studio открывает новый проект, включающий код по умолчанию «Hello World».
Откройте Visual Studio и в начальном окне выберите Создать проект.
Применив фильтры по языку, платформе и типу проекта, выберите шаблон Консольное приложение и щелкните Далее.
Если шаблон Консольное приложение не отображается, выберите Установка других средств и компонентов.
В окне Настроить новый проект введите Calculator в поле Имя проекта, а затем щелкните Далее.
В окне Дополнительные сведения для целевой платформы должна быть указана версия .NET 6.0. Нажмите кнопку создания.
Visual Studio открывает новый проект, включающий код по умолчанию «Hello World».
Создание приложения
В этом разделе выполняются следующие действия:
Вычисления с целыми числами
Давайте начнем с базовых расчетов для целых чисел в C#.
В редакторе кода удалите созданный по умолчанию код Hello, World!.
Вместо нее введите следующий код:
Обратите внимание на то, что при этом функция IntelliSense в Visual Studio предлагает возможность автовыполнения записи.
Следующая анимация не предназначена для дублирования предыдущего кода. Она предназначена только для того, чтобы продемонстрировать, как работает функция автозаполнения.
Нажмите зеленую кнопку Пуск или клавишу F5 рядом с калькулятором, чтобы создать и запустить программу.
Откроется окно консоли с суммой 42 + 119, которая равна 161.
Закройте окно консоли.
В разделе Обозреватель решений в области справа выберите Program.cs, чтобы отобразить файл в редакторе кода.
В редакторе кода замените код по умолчанию Hello World ( Console.WriteLine(«Hello World!»); ).
Замените строку следующим кодом:
Если вы вводите код, возможность Visual Studio IntelliSense предлагает выполнить автозавершение ввода.
Указанная ниже анимация предназначена для демонстрации не предыдущего кода, а принципа работы IntelliSense.
Чтобы создать и запустить приложение, нажмите клавишу F5 или выберите зеленую стрелку рядом с элементом Calculator на верхней панели инструментов.
Откроется окно консоли с суммой 42 + 119, которая равна 161.
Закройте окно консоли.
Добавление кода для создания калькулятора
Давайте продолжим, добавив более сложный набор кода калькулятора в проект.
В редакторе кода замените весь код в program.cs на следующий новый код:
Нажмите кнопку Калькулятор или клавишу F5, чтобы запустить приложение.
Откроется окно консоли.
В окне консоли используйте подсказки, чтобы суммировать числа 42 и 119.
Теперь приложение должно выглядеть как на следующем снимке экрана:
Добавление возможностей десятичного числа
Далее мы будем изменять этот код, добавляя функциональные возможности.
Пока наше приложение принимает и возвращает только целые числа. Например, при запуске программы и делении числа 42 на число 119 вы получите результат 0, что для нас недостаточно точно.
Чтобы исправить код для повышения точности при обработке десятичных чисел, выполните указанные ниже действия.
В разделе program.cs в редакторе Visual Studio нажмите сочетание клавиш CTRL+H, чтобы открыть элемент управления Найти и заменить.
Введите int в элементе управления, а затем введите float в поле Заменить.
Выберите значки Учитывать регистр и Слово целиком в элементе управления или нажмите сочетание клавиш ALT+C и ALT+W.
Щелкните значок Заменить все или нажмите сочетание клавиш ALT+A, чтобы выполнить поиск и замену.
Еще раз запустите приложение калькулятора и разделите число 42 на число 119.
Теперь приложение возвращает не просто ноль, а десятичное число.
Теперь приложение может возвращать результаты в виде десятичного числа. Давайте изменим код так, чтобы приложение могло выполнять операции над десятичными числами.
Запустите приложение калькулятора и разделите число 42,5 на число 119,75.
Теперь приложение принимает десятичные значения и возвращает более длинное десятичное число в качестве результата.
В разделе Revise the code (Пересмотр кода) можно уменьшить количество десятичных разрядов в результатах.
Отладка приложения
Вы улучшили базовое приложение калькулятора, но ваше приложение еще не обрабатывает исключения, например ошибки ввода данных пользователем. Например, если пользователи попытаются разделить на ноль или ввести несоответствующий символ, приложение может остановить работу, вернуть ошибку или неожиданный нечисловой результат.
Давайте рассмотрим несколько типичных ошибок во входных данных, найдем их с помощью отладчика, если они там есть, и исправим код, чтобы устранить их.
Дополнительные сведения об отладчике и принципах его работы см. на странице Знакомство с отладчиком Visual Studio.
Исправление ошибки деления на ноль
При попытке деления числа на ноль консольное приложение может перестать отвечать, а затем покажет ошибку в редакторе кода.
Иногда приложение не зависает, а отладчик не отображает ошибку деления на ноль. Вместо этого приложение может вернуть непредвиденный нечисловой результат, например символ бесконечности. Приведенное ниже исправление кода по-прежнему применимо.
Чтобы изменить код для обработки этой ошибки, выполните указанные ниже действия.
В разделе program.cs замените код между case «d»: и комментарием // Wait for the user to respond before closing на следующий код:
Когда вы добавите новый код, раздел с оператором switch будет выглядеть так, как показано на следующем снимке экрана:
Теперь, когда вы будете делить любое число на ноль, приложение запросит другое число и будет отображать запрос, пока вы не предоставите ненулевое значение.
Исправление ошибки формата
Если ввести буквенный символ, когда для приложения необходим цифровой символ, приложение остановит работу. Visual Studio отображает причину проблемы в редакторе кода.
Чтобы решить эту проблему, можно выполнить рефакторинг ранее введенного кода.
Пересмотр кода
Класс Calculator выполняет основную часть работы для вычислений, а класс Program отвечает за пользовательский интерфейс и обработку ошибок.
В разделе program.cs удалите все из пространства имен Calculator между открывающей и закрывающей фигурными скобками:
Добавьте в фигурные скобки следующий новый класс Calculator :
Кроме того, добавьте новый класс Program со следующим содержимым:
Нажмите кнопку Калькулятор или клавишу F5, чтобы запустить приложение.
Разделите число 42 на число 119, следуя подсказкам на экране. Результаты должны выглядеть так, как показано на снимке экрана ниже.
Теперь вы можете ввести дополнительные формулы, пока не закроете консольное приложение. Для результатов также можно настроить меньшее количество десятичных разрядов. Если ввести неправильный символ, вы получите соответствующий ответ об ошибке.
Закрытие приложения
Закройте приложение «Калькулятор», если оно еще открыто.
Закройте область вывода в Visual Studio.
В Visual Studio нажмите клавиши CTRL+S, чтобы сохранить приложение.
Добавление системы управления исходным кодом Git
Теперь, когда вы создали приложение, вы можете добавить его в репозиторий Git. Мы их предоставим. Visual Studio упрощает этот процесс с помощью инструментов Git, которые вы можете использовать непосредственно из IDE.
Git — это наиболее широко используемая современная система контроля версий, поэтому, независимо от того, являетесь ли вы профессиональным разработчиком или учитесь программировать, Git может быть для вас весьма полезным. Если вы новичок в Git, вы можете начать с сайта https://git-scm.com/. Там вы найдете памятки, популярную электронную книгу и видеоматериалы по основам GIT.
Чтобы связать свой код с Git, вы начинаете с создания нового репозитория Git, в котором находится ваш код. Вот как это сделать.
В строке состояния в правом нижнем углу Visual Studio нажмите Добавить в систему управления версиями и выберите Git.
В диалоговом окне Создать репозиторий Git войдите в GitHub.
Имя репозитория заполняется автоматически в зависимости от расположения вашей папки. По умолчанию ваш новый репозиторий является частным. Это означает, что только вы можете получить к нему доступ.
Независимо от того, является ли ваш репозиторий общедоступным или частным, лучше всего иметь удаленную резервную копию кода, надежно хранящуюся на GitHub. Даже если вы не работаете с командой, удаленный репозиторий позволит получать доступ к коду с любого компьютера.
Щелкните Создать и отправить.
После того как вы создали свой репозиторий, вы увидите информацию о статусе в строке состояния.
Первый значок со стрелками показывает, сколько исходящих и входящих фиксаций в вашей текущей ветке. Вы можете использовать этот значок, чтобы получать любые входящие или исходящие фиксации. Вы также можете выбрать отображение этих фиксаций в первую очередь. Для этого щелкните значок и выберите Просмотреть исходящие/входящие.
Второй значок с карандашом показывает количество незафиксированных изменений в вашем коде. Щелкните этот значок, чтобы просмотреть эти изменения в окне Git Changes.
Чтобы узнать больше о том, как использовать Git с вашим приложением, см. документацию по управлению версиями Visual Studio.
Проверка: завершение кодирования
В рамках этого руководства вы внесли множество изменений в приложение калькулятора. Теперь оно более эффективно использует вычислительные ресурсы и обрабатывает большинство ошибок во входных данных.