Поделиться через


Создание консольного приложения "Калькулятор" на C++

Обычной отправной точкой для программиста C++ является приложение "Hello, world!", которое выполняется в командной строке. Вы начинаете с этого в этой статье, а затем переходите к чему-то более сложному: приложению калькулятора.

Предпосылки

  • Visual Studio с установленной и запущенной на компьютере рабочей нагрузкой Разработка классических приложений на C++. Чтобы установить его, см. раздел "Установка поддержки C++ в Visual Studio".
  • В этом руководстве демонстрируется функция под названием "Редактировать и продолжить", которая позволяет вносить изменения в код во время работы приложения. Чтобы включить режим изменения и продолжения, в главном меню выберите Инструменты>Параметры>Отладка>Общие и убедитесь, что установлена опция Требовать точного соответствия исходных файлов оригинальной версии.

Создание проекта приложения

Visual Studio использует проекты для упорядочивания кода для приложения и решений для организации одного или нескольких проектов. Проект содержит все параметры, конфигурации и правила, используемые для создания приложения. Он также управляет связью между всеми файлами проекта и любыми внешними файлами. Чтобы создать приложение, сначала создайте проект и решение.

  1. Запустите Visual Studio- появится диалоговое окно "Пуск Visual Studio". Выберите "Создать проект", чтобы приступить к работе.

    Снимок экрана: диалоговое окно, которое отображается при запуске Visual Studio 2022.

    В диалоговом окне есть параметры клонирования репозитория, открытия проекта или решения, открытия локальной папки и создания нового проекта".

  2. В диалоговом окне "Создание проекта " установите раскрывающийся список языка на C++, установите раскрывающийся список платформы в Windows, выберите консольное приложение из списка типов проектов, а затем нажмите кнопку "Далее".

    Снимок экрана: диалоговое окно

    Раскрывающийся список языка имеет значение C++, раскрывающийся список платформы имеет значение Windows, а типы проектов, такие как пустой проект, консольное приложение, проект CMake, мастер рабочего стола Windows и т. д., отображаются в списке типов проектов".

    Это важно

    Убедитесь, что выбрана версия C++ шаблона консольного приложения . Он содержит теги C++, Windows и консоли , а значок имеет "++" в углу.

  3. В диалоговом окне "Настройка нового проекта " выберите текстовое поле "Имя проекта", назовите новый проект CalculatorTutorial, а затем нажмите кнопку "Создать".

    Снимок экрана: диалоговое окно

    Создается пустое консольное приложение C++ Windows Hello World. Консольные приложения используют окно консоли Windows для отображения выходных данных и приема входных данных пользователей. В Visual Studio откроется окно редактора и отображает созданный код:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    int main()
    {
        std::cout << "Hello World!\n";
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

Убедитесь, что ваше новое приложение собирается и запускается

Шаблон для нового консольного приложения Windows создает простое приложение C++ "Hello World". На этом этапе вы узнаете, как Visual Studio создает и запускает приложения, которые вы создаете прямо из интегрированной среды разработки.

  1. Чтобы собрать ваш проект, выберите "Собрать решение" в меню "Сборка". В окне выходных данных показаны результаты процесса сборки.

    Снимок экрана: окно вывода Visual Studio. Отображается сообщение о успешном завершении сборки.

  2. Чтобы запустить код, в строке меню выберите "Начать отладку>" без отладки (CTRL+F5).

    Снимок экрана: консоль отладки Visual Studio, отображающая выходные данные приложения: Hello World!

    Откроется окно консоли и приложение выполняется в нем.

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

    Поздравляю! Вы создали свое первое консольное приложение "Hello, world!" в Visual Studio!

  3. Нажмите клавишу, чтобы закрыть окно консоли и вернуться в Visual Studio.

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

Изменение кода

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

  1. Замените содержимое CalculatorTutorial.cpp файла следующим кодом, чтобы он соответствовал этому примеру:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b"
            << endl;
        return 0;
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

    Общие сведения о коде:

    • Инструкция #include включает код из других файлов. Иногда может отображаться имя файла, окруженное угловыми скобками, например <iostream>. Угловые скобки указывают компилятору сначала искать iostream файл заголовка в стандартных системных каталогах, а если он не найден, чтобы просмотреть каталоги, относящиеся к проекту. В других случаях может отображаться имя файла, окруженное такими кавычками "someHeader.h". Кавычки указывают компилятору пропустить поиск в стандартных системных каталогах, а вместо этого искать только в каталогах проекта.
    • using namespace std; сообщает компилятору, что в этом файле следует ожидать использование кода из стандартной библиотеки C++. Без этой строки каждое ключевое слово из библиотеки должно быть предшествовало std::, чтобы указать на область. Например, без этой строки каждая ссылка cout будет записана как std::cout. Инструкция using добавляется, чтобы упростить доступ к коду в другом пространстве имен.
    • Ключевое cout слово используется для печати стандартных выходных данных в C++. Оператор << сообщает компилятору отправлять все, что находится справа от него, в стандартные выходные данные.
    • Ключевое endl слово похоже на клавишу ВВОД; он заканчивает строку и перемещает курсор на следующую строку. Лучше поместить \n внутрь строки (содержимой в ""), чтобы сделать то же самое, потому что endl всегда очищает буфер, что может ухудшить производительность программы. Но так как это очень небольшое приложение, endl вместо этого используется.
    • Все операторы C++ должны заканчиваться точкой с запятой, а все приложения C++ должны содержать функцию main() . Функция выполняется при запуске программы. Все коды должны быть доступны из main(), чтобы их можно было использовать.
  2. Чтобы сохранить файл, нажмите клавиши CTRL+S или щелкните значок диска floppy на панели инструментов в строке меню.

  3. Чтобы запустить приложение, нажмите клавиши CTRL+F5 или перейдите в меню отладки и нажмите кнопку "Пуск без отладки". Должно появиться окно консоли, которое выглядит следующим образом.

  4. Закройте окно консоли после завершения.

Добавление кода для выполнения некоторых математических действий

Класс похож на схему для объекта, который делает что-то. В этом случае мы определим класс калькулятора для хранения математической логики.

Добавление класса Калькулятора

  1. Перейдите в меню "Проект" и выберите "Добавить класс". В поле редактирования имени класса введите калькулятор. Нажмите ОК.

    Снимок экрана: диалоговое окно добавления класса Visual Studio.

    Поле имени класса содержит калькулятор текста. Поле .h файла содержит Calculator.h. Поле файла .cpp содержит Calculator.cpp. Поле базового класса пусто. Параметры встроенной и управляемой отключены.

    В проект добавляются два новых файла. Чтобы сохранить все измененные файлы одновременно, нажмите клавиши CTRL+SHIFT+S. Это сочетание клавиш для Файл>Сохранить все. Есть также кнопка панели инструментов для сохранить все, значок с изображением двух дискет, рядом с кнопкой «Сохранить». Как правило, рекомендуется часто сохранять все , поэтому вы не пропустите никаких изменений.

    Мастер Добавить Класс создает файлы .h и .cpp, которые имеют то же имя, что и класс. Полный список файлов проекта можно просмотреть в окне обозревателя решений , который отображается на стороне интегрированной среды разработки. Если окно не отображается, откройте его в меню через Вид>Обозреватель решений.

    Снимок экрана: окно обозревателя решений Visual Studio.

    В проекте руководства по калькулятору есть узел файлов заголовков, содержащий Calculator.h. Узел исходных файлов содержит Calculator.cpp и CalculatorTutorial.cpp. Узлы для ссылок, внешних зависимостей и файлов ресурсов видимы, но закрыты.

    Файл можно открыть, дважды щелкнув его в окне обозревателя решений . Дважды щелкните Calculator.h, чтобы открыть.

  2. Замените содержимое Calculator.h следующим кодом, чтобы файл выглядел следующим образом:

    #pragma once
    class Calculator
    {
    public:
        double Calculate(double x, char oper, double y);
    };
    

    Общие сведения о коде

    • Этот код объявляет новую функцию Calculate, которая обрабатывает математические операции для добавления, вычитания, умножения и деления.
    • Код C++ организован в файлы заголовков и.hисходные (.cppфайлы). Некоторые другие расширения файлов поддерживаются различными компиляторами, но это основные, о которых нужно знать. Функции и переменные обычно объявляются, т. е. присваиваются имя и тип, в файлах заголовков и реализуются или определяются в исходных файлах. Для доступа к коду, определенному в другом файле, можно использовать #include "filename.h"имя файла, filename.h объявляющего переменные или функции, которые вы хотите использовать.
    • Хорошей практикой является организовать ваш код в разные файлы в зависимости от выполняемых функций, чтобы позже легко найти нужный код. В нашем случае мы определяем Calculator класс отдельно от файла, содержащего main() функцию, но мы планируем ссылаться на Calculator класс в main().
  3. Зеленый волнистый элемент отображается под Calculate тем, что, хотя Calculate функция объявлена, она не определена. CalculateНаведите указатель мыши, щелкните стрелку вниз на значке отвертки и выберите "Создать определение вычисления" в Calculator.cpp.

    Скриншот выпадающего списка в окне редактора Visual Studio. Выделен параметр

    Этот код добавляется в Calculator.cpp:

    Снимок экрана редактора Visual Studio с определением функции Calculate.

    Определение функции: double Calculator::Calculate(double x, char oper, double y) { return 0,0; }

    В настоящее время он возвращает только 0,0. Давайте изменим это.

  4. Переключитесь на Calculator.cpp файл в окне редактора. Замените содержимое Calculator::Calculate(double x, char oper, double y) следующим:

    double Calculator::Calculate(double x, char oper, double y)
    {
        switch(oper)
        {
            case '+':
                return x + y;
            case '-':
                return x - y;
            case '*':
                return x * y;
            case '/':
                return x / y;
            default:
                return 0.0;
        }
    }
    

    Общие сведения о коде

    • Функция Calculate принимает число, оператор и второй номер. Затем он выполняет запрошенную операцию для двух чисел.
    • Инструкция switch проверяет, какой оператор был предоставлен, и выполняет блок кода, соответствующий этой операции. На случай если пользователь вводит оператор, который не обрабатывается ни одной из предыдущих default: выражений, это case является резервным вариантом. Лучше всего обрабатывать недопустимые входные данные пользователей более элегантным образом, но это выходит за рамки этого руководства.
    • Ключевое double слово обозначает тип числа, поддерживающего десятичные разряды. Этот тип числа называется числом с плавающей запятой и double означает число с плавающей запятой, которое имеет дополнительную точность. Таким образом калькулятор может обрабатывать как десятичную математику, так и целочисленную математику. Функция Calculate должна всегда возвращать число с плавающей запятой двойной точности из-за double в начале кода (это обозначает тип возвращаемого значения функции), поэтому мы возвращаем значение 0.0 в случае по умолчанию.
    • Файл .h объявляет прототип функции, который сообщает компилятору заранее, какие параметры он требует, и какой тип возвращаемого значения следует ожидать от него. Файл .cpp содержит все сведения о реализации функции.

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

Вызовите функции-члены класса Calculator

  1. Обновите функцию main в CalculatorTutorial.cpp следующим образом:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b"
             << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            result = c.Calculate(x, oper, y);
            cout << "Result " << "of " << x << oper << y << " is: " << result << endl;
        }
    
        return 0;
    }
    

    Общие сведения о коде

    • Так как программы C++ всегда начинаются с функции main(), нам нужно вызвать наш другой код из этой функции, поэтому требуется инструкция #include для того, чтобы сделать этот код видимым для функции main().
    • Переменные x, yoperи result объявляются для хранения первого числа, второго числа, оператора и конечного результата соответственно. Всегда рекомендуется дать им некоторые начальные значения, чтобы избежать неопределенного поведения, что делается здесь.
    • Строка Calculator c; объявляет объект с именем c экземпляра Calculator класса. Сам класс — это просто схема работы калькуляторов; Объект — это конкретный калькулятор, который выполняет математические вычисления.
    • Оператор while (true) является циклом. Код внутри цикла выполняется снова и снова, пока условие внутри () содержит значение true. Так как условие просто указано как true, это всегда верно, поэтому цикл выполняется навсегда. Чтобы закрыть программу, пользователь должен вручную закрыть окно консоли. В противном случае программа всегда ожидает новых входных данных.
    • Ключевое cin слово принимает входные данные от пользователя. Входной поток достаточно умный, чтобы обработать строку текста, введенную в окне консоли, и поместить ее внутри каждой из перечисленных переменных в порядке.
    • Выражение c.Calculate(x, oper, y); вызывает Calculate функцию, определенную ранее, и предоставляет введенные входные значения и запрошенную операцию. Затем функция возвращает число, хранящееся в result.
    • Наконец, выводится в консоль, result и пользователь видит результат вычисления.

Создание и проверка кода снова

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

  1. Нажмите CTRL+F5, чтобы перестроить и запустить приложение.

  2. Введите 5+5, и нажмите ВВОД. Убедитесь, что результат равен 10.

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

    Приложение выводит сообщение: введите операцию для выполнения. Формат: a+b | a-b | a*b | a/b. Пользователь ввел 5+5. Выходные данные приложения: результат 5+5: 10

  3. Остановите программу, закрыв окно консоли.

Отладка приложения

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

Запуск приложения в отладчике

  1. В CalcuatorTutorial.cpp установите точку останова на строке: result = c.Calculate(x, oper, y); Чтобы задать точку останова, щелкните рядом с линией в серой вертикальной полосе вдоль левого края окна редактора, чтобы появилась красная точка.

    Снимок экрана редактора Visual Studio. Красная точка, представляющая точку останова, отображается в строке: result = c.Calculate(x, oper, y).

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

  2. Щелкните правой кнопкой мыши красную точку, представляющую точку останова, и выберите "Условия". В поле редактирования условия введите (y == 0) && (oper == '/'). Нажмите кнопку "Закрыть ", чтобы сохранить условие точки останова.

    Снимок экрана с установленной точкой останова

    Точка останова находится в строке: результат = c точка Вычислить(x, oper, y). "Условия…" Опция "Условия" отмечена. В раскрывающемся списке "Условия" задано значение "Условное выражение". Раскрывающийся список условий установлен на "истинно". Условие установлено как y == 0 && oper == '/'.

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

  3. Чтобы отладить программу, нажмите клавишу F5 или выберите кнопку на панели инструментов локального отладчика Windows с изображением зеленой стрелки. В консольном приложении, если ввести примерно такую же команду, как "5 – 0", программа работает нормально и продолжает работать. Однако если ввести "10/0", он приостанавливается в точке останова. Можно поместить любое количество пробелов между оператором и числами: cin достаточно умён, чтобы правильно интерпретировать входные данные.

    Снимок экрана редактора Visual Studio. Выполнение программы остановлено в условной точке останова в строке: результат = c.Calculate(x, oper, y);.

Полезные окна в отладчике

При отладке кода могут появиться некоторые новые окна. Эти окна могут помочь в отладке. Посмотрите на окно Автомобили. В окне "Автоматически" отображаются текущие значения переменных, которые использовались по крайней мере три строки до текущей строки. Если окно "Авто" не отображается, в главном меню выберите "Отладка>windows>Autos".

Снимок экрана окна Авто отладчика Visual Studio.

Значение операции равно 47 '/', результат равен 5, x равно 10, а y — 0.

Чтобы просмотреть все переменные из этой функции, перейдите в окно "Локальные". Так как это небольшая функция, окно "Авто" и "Локальные" отображают одни и те же переменные. Но вы можете изменить значения этих переменных в окне "Локальные" во время отладки, чтобы узнать, какой эффект они будут иметь в программе. В этом случае мы оставим их в одиночку. Откройте окно "Локальные", выбрав "Локальные" в нижней части окна "Авто" или выбрав в главном меню "Отладка>Windows>"Локальные".

Снимок экрана: окно

Значение операции равно 47 "/", результат равен 0, x равно 10, а y — 0.

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

Снимок экрана: подсказка, показывающая значение переменной

Продолжить отладку

  1. Желтая стрелка слева показывает текущую точку выполнения. Текущая строка вызывает Calculate, поэтому нажмите F11, чтобы войти в функцию. Теперь вы выполняете код в теле Calculate функции. Будьте осторожны с Шагом Внутрь, так как он выполняет переход в любые функции на строке, на которой вы находитесь, включая функции стандартной библиотеки. Хорошо изучить стандартную библиотеку, но вам может быть более интересно сосредоточиться на своём собственном коде, а не на коде библиотеки.

  2. Теперь, когда точка выполнения находится в начале Calculate функции, нажмите клавишу F10 , чтобы перейти к следующей строке в выполнении программы. F10 также называется step over. Вы можете использовать шаг "Сверху" , чтобы перейти от строки к строке, не углубляясь в детали того, что происходит в каждой части строки. В общем случае следует использовать Шаг через, а не Шаг внутрь, если вы не хотите более глубоко изучить код, вызываемый из другого места (как вы это сделали, чтобы достичь тела Calculate).

  3. Продолжайте использовать F10, чтобы шаг за шагом переходить по каждой строке, пока не вернетесь к main() функции в другом файле, и остановитесь на cout строке.

    Программа делает то, что ожидается: она берет первое число и делит его на второе. На строке cout наведите указатель мыши на result переменную или просмотрите result в окне 'Авто'. Его значение — inf, которое не выглядит правильным.

    Снимок экрана: отладка калькулятора.

    Текущая инструкция в отладчике — cout << "Результат: " << результат << endl; В окне автопеременных результат равен inf.

    Давайте исправим его. Строка cout выводит значение, которое хранится в result, поэтому, если вы сделаете ещё один шаг вперёд с помощью F10, отобразится окно консоли:

    Снимок экрана: консоль отладки Visual Studio, отображающая результат деления по нулю.

    Выходные данные приложения: введите операцию для выполнения. Формат: a+b | a-b | a*b | a/b. Пользователь ввел 5-0. Вывод приложения: Результат: 5. Пользователь ввел 10/0. Выходные данные приложения: результат: inf

    Этот результат обусловлен тем, что деление по нулю не определено, поэтому программа не имеет числового ответа на запрошенную операцию.

Исправлена ошибка "деление на ноль"

Давайте обработаем деление на ноль более корректно, чтобы пользователю было проще понять проблему.

  1. Внесите следующие изменения в CalculatorTutorial.cpp. Вы можете оставить программу запущенной при редактировании, благодаря функции отладчика с именем Edit and Continue. Добавьте следующую ifcin >> x >> oper >> y; инструкцию, чтобы проверить деление по нулю и вывести сообщение пользователю, если это произойдет. В противном случае результат выводится.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            if (oper == '/' && y == 0)
            {
                cout << "Math error: Attempted to divide by zero!" << endl;
                continue;
            }
            else
            {
                result = c.Calculate(x, oper, y);
            }
            cout << "Result " << "of " << x << oper << y << " is: " << result << endl;
        }
    
        return 0;
    }
    
  2. Один раз нажмите клавишу F5 . Выполнение программы продолжается до тех пор, пока не потребуется приостановить её для запроса пользовательского ввода. Введите 10 / 0 еще раз. Теперь выводится более полезное сообщение. Пользователь запрашивает дополнительные входные данные, и программа продолжает выполняться нормально.

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

    В окне консоли отображаются две строки: 10 / 0 Результат: inf, а затем 10 / 0 Математическая ошибка: попытка разделить на ноль.

    Замечание

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

    Другая причина изменения и продолжения может завершиться ошибкой, если появится сообщение "Требовать исходные файлы для точного сопоставления исходного параметра версии в разделе "Параметры отладки>"> необходимо включить..." Чтобы устранить эту проблему, в главном меню выберите пункт"Параметры>отладки>инструментов>" и убедитесь, что требуется, чтобы исходные файлы точно соответствовали исходной версии.

    Общие сведения о сочетаниях клавиш запуска и отладки

    • F5 или Отладка>Запуск отладки запускает сеанс отладки, если он не активен, и программа выполняется до тех пор, пока не будет достигнута точка останова или программа потребует ввода от пользователя. Если входные данные пользователя не требуются, а точка останова недоступна, программа завершает работу, а окно консоли закрывается после завершения работы программы. Если программа выводится в консоль, используйте ctrl+F5 или установите точку останова перед нажатием клавиши F5 , чтобы сохранить окно открытым.
    • Ctrl+F5, или Отладка>Начать без отладки, запускает приложение без перехода в режим отладки. Это немного быстрее, чем отладка, и окно консоли остается открытым после завершения выполнения программы.
    • F10, известный как Step Over, позволяет выполнять итерацию по коду, строкам и визуализировать выполнение кода и значения переменных на каждом этапе выполнения.
    • F11, известный как Вход в, работает аналогично Переход, за исключением того, что он входит во все функции, вызываемые в строке выполнения. Например, если строка, выполняемая, вызывает функцию, нажатие клавиши F11 перемещает указатель в текст функции, чтобы вы могли следовать коду функции, прежде чем вернуться к строке, которую вы начали. Нажатие клавиши F10 позволяет перейти к следующей строке без пошагового выполнения вызова функции; Вызов функции все равно выполняется, но программа не приостанавливает выполнение, чтобы показать, что происходит.

Закройте приложение

  • Если он по-прежнему запущен, закройте окно консоли, чтобы остановить приложение калькулятора.

Добавьте систему управления версиями Git

Теперь, когда вы создали приложение, его может потребоваться добавить в репозиторий Git. Все предусмотрено. Visual Studio упрощает этот процесс с помощью средств Git, которые можно использовать непосредственно из интегрированной среды разработки.

Подсказка

Git является наиболее широко используемой современной системой управления версиями, поэтому независимо от того, является ли вы профессиональным разработчиком или вы узнаете, как кодировать, Git может быть очень полезным. Если вы не знакомы с Git, веб-сайт https://git-scm.com/ является хорошим местом для начала. Там вы можете найти памятки, популярную онлайн-книгу и видео Git Basics.

Чтобы связать код с Git, сначала создайте новый репозиторий Git, в котором находится ваш код. Это делается следующим образом:

  1. В строке состояния в правом нижнем углу Visual Studio выберите "Добавить в систему управления версиями" и выберите Git.

    Снимок экрана: кнопки управления версиями Git под областью обозревателя решений с выделенной кнопкой

  2. В диалоговом окне "Создание репозитория Git " войдите в GitHub.

    Снимок экрана: диалоговое окно создания репозитория Git, в котором создается новый репозиторий GitHub.

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

    Подсказка

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

  3. Выберите Создать и отправить.

    После создания репозитория в строке состояния отображаются сведения о состоянии.

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

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

    Второй значок с карандашом показывает количество незафиксированных изменений в коде. Вы можете выбрать этот значок, чтобы просмотреть эти изменения в окне изменений Git .

Дополнительные сведения об использовании Git с приложением см. в документации по управлению версиями Visual Studio.

Готовое приложение

Поздравляю! Вы завершили код для приложения калькулятора, создали и отладили его и добавили его в репозиторий, все в Visual Studio.

Дальнейшие шаги

Дополнительные сведения о Visual Studio для C++

Обычной отправной точкой для программиста C++ является приложение "Hello, world!", которое выполняется в командной строке. Вы начинаете с этого в этой статье, а затем переходите к чему-то более сложному: приложению калькулятора.

Предпосылки

Создание проекта приложения

Visual Studio использует проекты для упорядочивания кода для приложения и решений для организации одного или нескольких проектов. Проект содержит все параметры, конфигурации и правила, используемые для создания приложения. Он также управляет связью между всеми файлами проекта и любыми внешними файлами. Чтобы создать приложение, сначала создайте проект и решение.

  1. На панели меню в Visual Studio выберите "Файл>нового>проекта". Откроется окно "Новый проект ".

  2. На левой боковой панели убедитесь, что выбран Visual C++ . В центре выберите консольное приложение.

  3. В текстовом поле "Имя" внизу назовите новый проект CalculatorTutorial, а затем нажмите кнопку "ОК".

    Снимок экрана: диалоговое окно

    Слева выбраны другие языки > Visual C++ . В центре выбран тип проекта консольного приложения. Текстовое поле "Имя" содержит КалькуляторTutorial.

    Создается пустое консольное приложение C++ Windows Hello World. Консольные приложения используют окно консоли Windows для отображения выходных данных и приема входных данных пользователей. В Visual Studio откроется окно редактора и отображает созданный код:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    int main()
    {
        std::cout << "Hello World!\n";
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

Убедитесь, что ваше новое приложение собирается и запускается

Шаблон для нового консольного приложения Windows создает простое приложение C++ "Hello World". На этом этапе вы узнаете, как Visual Studio создает и запускает приложения, которые вы создаете прямо из интегрированной среды разработки.

  1. Чтобы собрать ваш проект, выберите "Собрать решение" в меню "Сборка". В окне выходных данных показаны результаты процесса сборки.

    Снимок экрана: окно вывода Visual Studio с указанием успешного выполнения сборки.

  2. Чтобы запустить код, в строке меню выберите "Отладка", "Пуск" без отладки (CTRL+F5).

    Снимок экрана: консоль отладки Visual Studio с выходными данными: Hello World!

    Откроется окно консоли и приложение выполняется в нем.

    При запуске консольного приложения в Visual Studio приложение выполняет код, а затем выводится Press any key to close this window . . ., чтобы у вас была возможность ознакомиться с выводом.

    Поздравляю! Вы создали свое первое консольное приложение "Hello, world!" в Visual Studio!

  3. Нажмите клавишу, чтобы закрыть окно консоли и вернуться в Visual Studio.

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

Изменение кода

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

  1. Замените содержимое CalculatorTutorial.cpp файла следующим кодом, чтобы он соответствовал этому примеру:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
        return 0;
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

    Общие сведения о коде:

    • Инструкция #include включает код из других файлов. Иногда может отображаться имя файла, окруженное угловыми скобками, например <iostream>. Угловые скобки указывают компилятору сначала искать iostream файл заголовка в стандартных системных каталогах, а если он не найден, чтобы просмотреть каталоги, относящиеся к проекту. В других случаях может отображаться имя файла, окруженное такими кавычками "someHeader.h". Кавычки указывают компилятору пропустить поиск в стандартных системных каталогах, а вместо этого искать только в каталогах проекта.
    • using namespace std; сообщает компилятору, что в этом файле следует ожидать использование кода из стандартной библиотеки C++. Без этой строки каждое ключевое слово из библиотеки должно быть предшествовало std::, чтобы указать на область. Например, без этой строки каждая ссылка cout будет записана как std::cout. Инструкция using добавляется, чтобы упростить доступ к коду в другом пространстве имен.
    • Ключевое слово cout в C++ используется для вывода на стандартный выход. Оператор << сообщает компилятору отправлять все, что находится справа от него, в стандартные выходные данные.
    • Ключевое endl слово похоже на клавишу ВВОД; он заканчивает строку и перемещает курсор на следующую строку. Лучше поместить \n внутрь строки (содержащей ""), чтобы сделать то же самое, потому что endl всегда очищает буфер и может повредить производительности программы. Но так как это очень небольшое приложение, endl вместо этого используется.
    • Все операторы C++ должны заканчиваться точкой с запятой, а все приложения C++ должны содержать функцию main() . Функция выполняется при запуске программы. Все коды должны быть доступны из main(), чтобы их можно было использовать.
  2. Чтобы сохранить файл, нажмите клавиши CTRL+S или щелкните значок диска floppy на панели инструментов в строке меню.

  3. Чтобы запустить приложение, нажмите клавиши CTRL+F5 или перейдите в меню отладки и нажмите кнопку "Пуск без отладки". Если появится всплывающее окно с сообщением о том, что проект устарел, можно снова выбрать "Не показывать это диалоговое окно", а затем нажмите кнопку "Да ", чтобы создать приложение. Должно появиться окно консоли, которое выглядит следующим образом:

    Снимок экрана: приложение калькулятора, работающее в окне консоли.

    Консольное приложение отображает выходные данные: Приложение-калькулятор для консоли. Введите операцию, которую нужно выполнить. Формат: a+b | a-b | a*b | a/b. Процесс завершился с кодом 0, и отображается сообщение: для автоматического закрытия консоли после остановки отладки включите Средства > Параметры > Отладка > Автоматически закрывать консоль при остановке отладки. Наконец, есть сообщение, чтобы нажать любую клавишу, чтобы закрыть это окно.

  4. Закройте окно консоли после завершения.

Добавление кода для выполнения некоторых математических действий

Класс похож на схему для объекта, который делает что-то. В этом случае мы определим класс калькулятора для хранения математической логики.

Добавление класса Калькулятора

  1. Перейдите в меню "Проект" и выберите "Добавить класс". В поле редактирования имени класса введите калькулятор. Нажмите ОК.

    Снимок экрана: диалоговое окно добавления класса Visual Studio.

    Поле имени класса содержит калькулятор текста. Поле .h файла содержит Calculator.h. Поле файла .cpp содержит Calculator.cpp. Поле базового класса пусто. Параметры встроенной и управляемой отключены.

    Класс похож на схему для объекта, который делает что-то. В этом случае мы определим калькулятор и как он должен работать.

    В проект добавляются два новых файла. Чтобы сохранить все измененные файлы одновременно, нажмите клавиши CTRL+SHIFT+S. Это сочетание клавиш для Файл>Сохранить все. Есть также кнопка панели инструментов для сохранить все, значок с изображением двух дискет, рядом с кнопкой «Сохранить». Как правило, рекомендуется часто сохранять все , чтобы не пропускать файлы при сохранении.

    Мастер Добавить Класс создает файлы .h и .cpp, которые имеют то же имя, что и класс. Полный список файлов проекта можно просмотреть в окне обозревателя решений , который отображается на стороне интегрированной среды разработки. Если обозреватель решений не отображается, откройте его в строке меню: выберите "Просмотреть>обозреватель решений".

    Снимок экрана: окно обозревателя решений Visual Studio.

    В проекте руководства по калькулятору есть узел файлов заголовков, содержащий Calculator.h, stdafx.h и targetver.h. Узел исходных файлов содержит Calculator.cpp, CalculatorTutorial.cpp и stdafx.cpp. Узлы для ссылок, внешних зависимостей и файлов ресурсов видимы, но закрыты.

    Файл можно открыть, дважды щелкнув его в окне обозревателя решений . Дважды щелкните Calculator.h, чтобы открыть.

  2. Замените содержимое Calculator.h следующим кодом, чтобы файл выглядел следующим образом:

    #pragma once
    class Calculator
    {
    public:
        double Calculate(double x, char oper, double y);
    };
    

    Общие сведения о коде

    • Этот код объявляет новую функцию Calculate, которая обрабатывает математические операции для добавления, вычитания, умножения и деления.
    • Код C++ организован в файлы заголовков и.hисходные (.cppфайлы). Некоторые другие расширения файлов поддерживаются различными компиляторами, но это основные, о которых нужно знать. Функции и переменные обычно объявляются, т. е. присваиваются имя и тип, в файлах заголовков и реализуются или определяются в исходных файлах. Для доступа к коду, определенному в другом файле, можно использовать #include "filename.h"имя файла, filename.h объявляющего переменные или функции, которые вы хотите использовать.
    • Хорошей практикой является организовать ваш код в разные файлы в зависимости от выполняемых функций, чтобы позже легко найти нужный код. В нашем случае мы определяем Calculator класс отдельно от файла, содержащего main() функцию, но мы планируем ссылаться на Calculator класс в main().
  3. Зеленый волнистый элемент отображается под Calculate тем, что, хотя Calculate функция объявлена, она не определена. Наведите указатель мыши на Calculate, щелкните стрелку вниз на значке лампочки и выберите Создать определение для "Вычислить" в Calculator.cpp. Появится всплывающее окно, позволяющее просмотреть изменение кода, которое было сделано в другом файле. Код был добавлен в Calculator.cpp.

    Видео, показывающее использование значка лампочки для создания определения функции Calculate в файле Calculator.cpp.

    В настоящее время он возвращает только 0,0. Давайте изменим это. Нажмите клавишу ESC , чтобы закрыть всплывающее окно и нажмите кнопку "Да ", чтобы сохранить изменения.

  4. Переключитесь на Calculator.cpp файл в окне редактора. Замените содержимое файла следующим кодом:

    #include "Calculator.h"
    
    double Calculator::Calculate(double x, char oper, double y)
    {
        switch(oper)
        {
            case '+':
                return x + y;
            case '-':
                return x - y;
            case '*':
                return x * y;
            case '/':
                return x / y;
            default:
                return 0.0;
        }
    }
    

    Общие сведения о коде

    • Функция Calculate принимает число, оператор и второй номер. Затем он выполняет запрошенную операцию для двух чисел.
    • Инструкция switch проверяет, какой оператор был предоставлен, и выполняет блок кода, соответствующий этой операции. На случай если пользователь вводит оператор, который не обрабатывается ни одной из предыдущих default: выражений, это case является резервным вариантом. Лучше всего обрабатывать недопустимые входные данные пользователей более элегантным образом, но это выходит за рамки этого руководства.
    • Ключевое double слово обозначает тип числа, поддерживающего десятичные разряды. Этот тип числа называется числом с плавающей запятой и double означает число с плавающей запятой, которое имеет дополнительную точность. Таким образом калькулятор может обрабатывать как десятичную математику, так и целочисленную математику. Функция Calculate должна всегда возвращать число с плавающей запятой двойной точности из-за double в начале кода (это обозначает тип возвращаемого значения функции), поэтому мы возвращаем значение 0.0 в случае по умолчанию.
    • Файл .h объявляет прототип функции, который сообщает компилятору заранее, какие параметры он требует, и какой тип возвращаемого значения следует ожидать от него. Файл .cpp содержит все сведения о реализации функции.

Если вы создадите и снова запустите код на этом этапе, он по-прежнему завершает работу после запроса выполнения операции. Затем измените функцию main , чтобы выполнить некоторые вычисления.

Вызов функций-членов класса Калькулятора

  1. Обновите функцию main в CalculatorTutorial.cpp следующим образом:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            result = c.Calculate(x, oper, y);
            cout << "Result is: " << result << endl;
        }
    
        return 0;
    }
    

    Общие сведения о коде

    • Так как программы C++ всегда начинаются с функции main(), нам нужно вызвать наш другой код из этой функции, поэтому требуется инструкция #include для того, чтобы сделать этот код видимым для функции main().
    • Переменные x, yoperи result объявляются для хранения первого числа, второго числа, оператора и конечного результата соответственно. Всегда рекомендуется дать им некоторые начальные значения, чтобы избежать неопределенного поведения, что делается здесь.
    • Строка Calculator c; объявляет объект с именем c экземпляра Calculator класса. Сам класс — это просто схема работы калькуляторов; Объект — это конкретный калькулятор, который выполняет математические вычисления.
    • Оператор while (true) является циклом. Код внутри цикла выполняется снова и снова, пока условие внутри () содержит значение true. Так как условие просто указано как true, это всегда верно, поэтому цикл выполняется навсегда. Чтобы закрыть программу, пользователь должен вручную закрыть окно консоли. В противном случае программа всегда ожидает новых входных данных.
    • Ключевое cin слово принимает входные данные от пользователя. Входной поток достаточно умный, чтобы обработать строку текста, введенную в окне консоли, и поместить ее внутри каждой из перечисленных переменных в порядке.
    • Выражение c.Calculate(x, oper, y); вызывает Calculate функцию, определенную ранее, и предоставляет введенные входные значения и запрошенную операцию. Затем функция возвращает число, хранящееся в result.
    • Наконец, выводится в консоль, result и пользователь видит результат вычисления.

Создание и проверка кода снова

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

  1. Нажмите CTRL+F5, чтобы перестроить и запустить приложение.

  2. Введите 5+5, и нажмите ВВОД. Убедитесь, что результат равен 10.

    Снимок экрана: окно командной строки с приложением Калькулятора. В нем показано, что результатом 5 + 5 является 10.

  3. Остановите программу, закрыв окно консоли.

Отладка приложения

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

Запуск приложения в отладчике

  1. Установите в CalcuatorTutorial.cpp точку останова на строке result = c.Calculate(x, oper, y);. Чтобы задать точку останова, щелкните рядом с линией в серой вертикальной полосе вдоль левого края окна редактора, чтобы появилась красная точка.

    Снимок экрана: настройка точки останова в строке 23: результат = c.Calculate(x, oper, y);.

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

  2. Щелкните правой кнопкой мыши красную точку, представляющую точку останова, и выберите "Условия". В поле редактирования условия введите (y == 0) && (oper == '/'). Нажмите кнопку «Закрыть» после завершения, чтобы сохранить условие точки останова.

    Снимок экрана: окно условной точки останова.

    Точка останова находится в строке: результат = c точка Вычислить(x, oper, y). "Условия…" Опция "Условия" отмечена. В раскрывающемся списке "Условия" задано значение "Условное выражение". Раскрывающийся список условий установлен на "истинно". Условие установлено как y == 0 && oper == '/'.

    Выполнение приостанавливается в точке останова, если выполняется попытка деления на 0.

  3. Чтобы выполнить отладку программы, нажмите клавишу F5 или нажмите кнопку панели инструментов локального отладчика Windows , которая имеет зеленый значок со стрелкой. В консольном приложении, если ввести примерно такую же команду, как "5 – 0", программа работает нормально и продолжает работать. Однако если ввести "10/0", он приостанавливается в точке останова. Можно даже поместить любое количество пробелов между оператором и числами; cin достаточно умен, чтобы правильно обрабатывать входные данные.

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

    Пользователь вводит значение 5 – 0. Выходные данные приложения: Результат — 5. Затем пользователь вводит значение 10/0 и, поскольку условие условной точки останова выполняется, выполнение останавливается в строке: результат = c.Calculate(x, oper, y);

Полезные окна в отладчике

При отладке кода могут появиться некоторые новые окна. Эти окна могут помочь в отладке. Посмотрите на окно Автомобили. В окне "Автоматически" отображаются текущие значения переменных, которые использовались по крайней мере три строки до текущей строки. Если окно "Авто" не отображается, в главном меню выберите "Отладка>windows>Autos".

Снимок экрана окна Авто отладчика Visual Studio.

Значение операции равно 47 '/', результат равен 5, x равно 10, а y — 0.

Чтобы просмотреть все переменные из этой функции, перейдите в окно "Локальные". Так как это небольшая функция, окно "Авто" и "Локальные" отображают одни и те же переменные. Но вы можете изменить значения этих переменных во время отладки, чтобы узнать, какой эффект они будут иметь в программе. В этом случае мы оставим их в одиночку. Откройте окно "Локальные", выбрав "Локальные" в нижней части окна "Авто" или выбрав в главном меню "Отладка>Windows>"Локальные".

Снимок экрана: окно

Значение операции равно 47 "/", результат равен 0, x равно 10, а y — 0.

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

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

Продолжить отладку

  1. Желтая стрелка слева показывает текущую точку выполнения. Текущая строка вызывает Calculate, поэтому нажмите F11, чтобы шагнуть в функцию, что приведет вас в тело функции Calculate. Будьте осторожны с Шагом Внутрь, так как он выполняет переход в любые функции на строке, на которой вы находитесь, включая функции стандартной библиотеки. Хорошо изучить стандартную библиотеку, но вам может быть более интересно сосредоточиться на своём собственном коде, а не на коде библиотеки.

  2. Теперь, когда точка выполнения находится в начале Calculate функции, нажмите клавишу F10 , чтобы перейти к следующей строке в выполнении программы. F10 также называется step over. Вы можете использовать шаг "Сверху" , чтобы перейти от строки к строке, не углубляясь в детали того, что происходит в каждой части строки. В общем случае следует использовать Шаг через вместо Шаг вглубь, если вы не хотите более глубоко изучить код, вызываемый из другого места (как вы сделали, чтобы добраться до тела Calculate).

  3. Продолжайте использовать F10, чтобы шаг за шагом переходить по каждой строке, пока не вернетесь к main() функции в другом файле, и остановитесь на cout строке.

    Программа делает то, что ожидается: она берет первое число и делит его на второе. На строке cout наведите указатель мыши на result переменную или просмотрите result в окне 'Авто'. Его значение — inf, которое не выглядит правильным.

    Снимок экрана: отладка калькулятора.

    Текущая инструкция в отладчике — cout << "Результат: " << результат << endl; В окне автопеременных результат равен inf.

    Давайте исправим его. Строка cout выводит значение, которое хранится в result, поэтому, если вы сделаете ещё один шаг вперёд с помощью F10, отобразится окно консоли:

    Снимок экрана: консоль отладки Visual Studio, отображающая результат деления по нулю.

    Выходные данные приложения: введите операцию для выполнения. Формат: a+b | a-b | a*b | a/b. Пользователь ввел 5-0. Вывод приложения: Результат: 5. Пользователь ввел 10/0. Выходные данные приложения: результат: inf

    Этот результат обусловлен тем, что деление по нулю не определено, поэтому программа не имеет числового ответа на запрошенную операцию.

Исправлена ошибка "деление на ноль"

Давайте обработаем деление на ноль более корректно, чтобы пользователю было проще понять проблему.

  1. Внесите следующие изменения в CalculatorTutorial.cpp. (Вы можете оставить программу запущенной при редактировании, благодаря функции отладчика с именем "Изменить и продолжить". Изменение заключается в добавлении инструкции if после cin >> x >> oper >> y; для проверки деления на ноль и вывода сообщения пользователю, если это произойдет. В противном случае результат выводится:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            if (oper == '/' && y == 0)
            {
                cout << "Division by 0 exception" << endl;
                continue;
            }
            else
            {
                result = c.Calculate(x, oper, y);
            }
            cout << "Result is: " << result << endl;
        }
    
        return 0;
    }
    
  2. Один раз нажмите клавишу F5 . Выполнение программы продолжается до тех пор, пока не потребуется приостановить её для запроса пользовательского ввода. Введите 10 / 0 еще раз. Теперь выводится более полезное сообщение. Пользователь запрашивает дополнительные входные данные, и программа продолжает выполняться нормально.

    Видео консоли отладки (Debug Console), показывающее окончательный результат после изменений кода. Введены значения 10 / 0, и программа отображает

    Замечание

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

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

    Общие сведения о сочетаниях клавиш запуска и отладки

    • F5 или Отладка>Запуск отладки запускает сеанс отладки, если он не активен, и программа выполняется до тех пор, пока не будет достигнута точка останова или программа потребует ввода от пользователя. Если входные данные пользователя не требуются, а точка останова недоступна, программа завершает работу, а окно консоли закрывается после завершения работы программы. Если программа выводится в консоль, используйте ctrl+F5 или установите точку останова перед нажатием клавиши F5 , чтобы сохранить окно открытым.
    • Ctrl+F5, или Отладка>Начать без отладки, запускает приложение без перехода в режим отладки. Это немного быстрее, чем отладка, и окно консоли остается открытым после завершения выполнения программы.
    • F10, известный как Step Over, позволяет выполнять итерацию по коду, строкам и визуализировать выполнение кода и значения переменных на каждом этапе выполнения.
    • F11, известный как Вход в, работает аналогично Переход, за исключением того, что он входит во все функции, вызываемые в строке выполнения. Например, если строка, выполняемая, вызывает функцию, нажатие клавиши F11 перемещает указатель в текст функции, чтобы вы могли следовать коду функции, прежде чем вернуться к строке, которую вы начали. Нажатие клавиши F10 позволяет перейти к следующей строке без пошагового выполнения вызова функции; Вызов функции все равно выполняется, но программа не приостанавливает выполнение, чтобы показать, что происходит.

Закройте приложение

  • Если он по-прежнему запущен, закройте окно консоли, чтобы остановить приложение калькулятора.

Готовое приложение

Поздравляю! Вы завершили код для приложения калькулятора и создали и отладили его в Visual Studio.

Дальнейшие шаги

Дополнительные сведения о Visual Studio для C++