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

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

Предпосылки

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

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

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

  1. Запустите Visual Studio. Откроется диалоговое окно запуска Visual Studio. Выберите Создать новый проект.

    Снимок экрана диалогового окна, которое появляется при запуске Visual Studio, с выделенным пунктом «Создать проект».

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

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

    Снимок экрана диалогового окна «Создание нового проекта» в Visual Studio с выделенным пунктом «Консольное приложение».

    Установлен язык C++, в качестве платформы выбрана Windows, и в списке типов проектов отображаются такие типы проектов, как Empty Project, Console App, CMake Project и Windows Desktop Wizard.

    Это важно

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

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

    Снимок экрана: диалоговое окно Visual Studio Настройка нового проекта, которое содержит поля для имени проекта, расположения проекта и имени решения.

    Создается пустое консольное приложение 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, щелкните стрелку вниз на значке отвертки и выберите «Создать определение для "Calculate" в Calculator.cpp».

    Снимок экрана окна редактора Visual Studio с выпадающим меню значка отвертки, в котором выделен параметр «Создать определение Calculate в Calculator.cpp».

    Этот код добавляется в 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, веб-сайт Git является хорошим местом для начала. Там вы можете найти памятки, популярную онлайн-книгу и видео 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 выберите "Создать файл>>"Project. Откроется окно "Новый проект ".

  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, щелкните стрелку вниз на лампочке и выберите «Создать определение для "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. Вы можете оставить программу запущенной при редактировании, благодаря функции отладчика с именем Edit and Continue. Изменение заключается в добавлении инструкции 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++