Tworzenie kalkulatora konsoli w C++

Zwykle punktem wyjścia dla programisty języka C++ jest aplikacja "Hello, world!", która działa w wierszu polecenia. Zaczniesz od tego w tym artykule, a następnie przejdziemy do czegoś trudniejszego: aplikacji kalkulatora.

Wymagania wstępne

  • Program Visual Studio z programowaniem aplikacji klasycznych z zainstalowanym obciążeniem języka C++ i uruchomionym na komputerze. Aby go zainstalować, zobacz Instalowanie obsługi języka C++ w programie Visual Studio.
  • W tym samouczku przedstawiono funkcję o nazwie edytuj i kontynuuj, która umożliwia wprowadzanie zmian w kodzie podczas działania aplikacji. Aby włączyć edycję i kontynuować, w menu głównym wybierz pozycję Narzędzia>Opcje>Debugowanie>ogólne i upewnij się, że opcja Wymagaj plików źródłowych do dokładnego dopasowania oryginalnej wersji jest zaznaczona.

Tworzenie projektu aplikacji

Program Visual Studio używa projektów do organizowania kodu dla aplikacji i rozwiązań w celu organizowania co najmniej jednego projektu. Projekt zawiera wszystkie opcje, konfiguracje i reguły używane do tworzenia aplikacji. Zarządza również relacją między wszystkimi plikami projektu i plikami zewnętrznymi. Aby utworzyć aplikację, najpierw utwórz nowy projekt i rozwiązanie.

  1. Uruchom program Visual Studio — zostanie wyświetlone okno dialogowe Uruchamianie programu Visual Studio. Wybierz pozycję Utwórz nowy projekt , aby rozpocząć pracę.

    Zrzut ekranu przedstawiający okno dialogowe wyświetlane po uruchomieniu programu Visual Studio 2022.

    Okno dialogowe zawiera opcje klonowania repozytorium, otwierania projektu lub rozwiązania, otwierania folderu lokalnego i tworzenia nowego projektu".

  2. Na liście szablonów projektów wybierz pozycję Aplikacja konsolowa, a następnie wybierz pozycję Dalej.

    Zrzut ekranu przedstawiający okno dialogowe Tworzenie nowego projektu w programie Visual Studio. Opcja Szablon aplikacji konsoli jest wyróżniona.

    Ważne

    Upewnij się, że wybrano wersję języka C++ szablonu Aplikacja konsolowa. Ma tagi C++, Windows i Console, a ikona ma "++" w rogu.

  3. W oknie dialogowym Konfigurowanie nowego projektu wybierz pole tekstowe Nazwa projektu, nadaj nowemu projektowi nazwę CalculatorTutorial, a następnie wybierz pozycję Utwórz.

    Zrzut ekranu przedstawiający okno dialogowe Konfigurowanie nowego projektu w programie Visual Studio. Zawiera pola nazwy projektu, lokalizacji projektu i nazwy rozwiązania.

    Zostanie utworzona pusta aplikacja konsolowa systemu Windows w języku C++ "Hello World". Aplikacje konsolowe używają okna konsoli systemu Windows do wyświetlania danych wyjściowych i akceptowania danych wejściowych użytkownika. W programie Visual Studio zostanie otwarte okno edytora z wyświetlonym wygenerowanym kodem:

    // 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
    

Sprawdź, czy nowa aplikacja kompiluje i uruchamia

Szablon nowej aplikacji konsolowej systemu Windows tworzy prostą aplikację "Hello World" w języku C++. W tym momencie możesz zobaczyć, jak program Visual Studio kompiluje i uruchamia aplikacje tworzone bezpośrednio ze środowiska IDE.

  1. Aby skompilować projekt, wybierz pozycję Kompiluj rozwiązanie z menu Kompilacja . W oknie Dane wyjściowe są wyświetlane wyniki procesu kompilacji.

    Zrzut ekranu przedstawiający okno Dane wyjściowe programu Visual Studio. Zostanie wyświetlony komunikat informujący o pomyślnym zakończeniu kompilacji.

  2. Aby uruchomić kod, na pasku menu wybierz pozycję Debuguj, Rozpocznij bez debugowania (Ctrl+F5).

    Zrzut ekranu przedstawiający konsolę debugowania programu Visual Studio z danymi wyjściowymi aplikacji: Hello World!.

    Zostanie otwarte okno konsoli, a następnie uruchomi aplikację.

    Po uruchomieniu aplikacji konsolowej w programie Visual Studio zostanie uruchomiony kod, a następnie wyświetli komunikat "Naciśnij dowolny klawisz, aby zamknąć to okno. . ." w celu wyświetlenia danych wyjściowych.

    Gratulacje! Utworzono pierwszą aplikację konsolową "Hello, world!" w programie Visual Studio!

  3. Naciśnij klawisz, aby zamknąć okno konsoli i wrócić do programu Visual Studio.

Teraz masz narzędzia do kompilowania i uruchamiania aplikacji po każdej zmianie, aby sprawdzić, czy kod nadal działa zgodnie z oczekiwaniami. Później pokażemy, jak go debugować, jeśli nie.

Edytowanie kodu

Teraz zmodyfikujmy kod w tym szablonie tak, aby był aplikacją kalkulatora.

  1. Zastąp zawartość CalculatorTutorial.cpp pliku następującym kodem, tak aby był zgodny z tym przykładem:

    // 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
    

    Opis kodu:

    • Instrukcje #include umożliwiają odwołanie do kodu znajdującego się w innych plikach. Czasami może być widoczna nazwa pliku otoczona nawiasami kątowymi (<>); czasami jest otoczona cudzysłowami (" ). Ogólnie rzecz biorąc, nawiasy kątowe są używane podczas odwoływania się do standardowej biblioteki języka C++, podczas gdy cudzysłowy są używane dla innych plików.
    • Wiersz using namespace std; informuje kompilator o oczekiwaniu użycia elementów z standardowej biblioteki języka C++ w tym pliku. Bez tego wiersza każde słowo kluczowe z biblioteki musi być poprzedzone std:: , aby oznaczyć jego zakres. Na przykład bez tego wiersza każde odwołanie cout musi być napisane jako std::cout. Instrukcja using jest dodawana w celu zwiększenia czytelnego wyglądu kodu.
    • Słowo cout kluczowe służy do drukowania do standardowych danych wyjściowych w języku C++. Operator << nakazuje kompilatorowi wysłanie dowolnego elementu na prawo do standardowych danych wyjściowych.
    • Słowo kluczowe jest podobne do klawisza endl Enter; kończy wiersz i przenosi kursor do następnego wiersza. Lepszym rozwiązaniem jest umieszczenie \n wewnątrz ciągu (zawartego przez "") w celu wykonania tej samej czynności, ponieważ endl zawsze opróżnia bufor, który może zaszkodzić wydajności programu. Ale ponieważ jest to bardzo mała aplikacja, endl jest używana zamiast tego w celu zapewnienia lepszej czytelności.
    • Wszystkie instrukcje języka C++ muszą kończyć się średnikami, a wszystkie aplikacje języka C++ muszą zawierać main() funkcję. Ta funkcja jest tym, co program jest uruchamiany na początku. Aby można było używać wszystkich kodów, musi być dostępny.main()
  2. Aby zapisać plik, naciśnij klawisze Ctrl+S lub wybierz ikonę Zapisz w górnej części środowiska IDE, ikonę dyskietki na pasku narzędzi pod paskiem menu.

  3. Aby uruchomić aplikację, naciśnij klawisze Ctrl+F5 lub przejdź do menu Debugowanie i wybierz pozycję Rozpocznij bez debugowania. Powinno zostać wyświetlone okno konsoli, w którym zostanie wyświetlony tekst określony w kodzie.

  4. Po zakończeniu zamknij okno konsoli.

Dodawanie kodu w celu wykonania pewnych obliczeń matematycznych

Klasa jest jak strategia dla obiektu, który coś robi. W tym przypadku zdefiniujemy klasę kalkulatora zawierającą logikę matematyczną.

Dodawanie klasy Kalkulator

  1. Przejdź do menu Project (Projekt) i wybierz pozycję Add Class (Dodaj klasę). W polu Edycja nazwy klasy wprowadź Kalkulator. Wybierz przycisk OK.

    Zrzut ekranu przedstawiający okno dialogowe Dodawanie klasy programu Visual Studio.

    Pole nazwy klasy jest ustawione na kalkulator. Pole pliku .h zawiera plik Calculator.h. Pole pliku .cpp zawiera Calculator.cpp. Pole klasy bazowej jest puste. Inne opcje dla destruktora wirtualnego, wbudowanego i niezarządzanego są niezaznaczone.

    Dwa nowe pliki są dodawane do projektu. Aby zapisać wszystkie zmienione pliki jednocześnie, naciśnij klawisze Ctrl+Shift+S. Jest to skrót klawiaturowy do zapisywania wszystkich plików>. Istnieje również przycisk paska narzędzi Dla opcji Zapisz wszystko, ikona dwóch dyskietek znajdujących się obok przycisku Zapisz . Ogólnie rzecz biorąc, dobrym rozwiązaniem jest częste zapisywanie wszystkich , więc nie pomijasz żadnych plików podczas zapisywania.

    Kreator Dodawania klasy tworzy .h pliki i .cpp pliki, które mają taką samą nazwę jak klasa. Pełną listę plików projektu można wyświetlić w oknie Eksplorator rozwiązań widocznym po stronie środowiska IDE. Jeśli okno nie jest widoczne, możesz go otworzyć na pasku menu: wybierz pozycję Widok> Eksplorator rozwiązań.

    Zrzut ekranu przedstawiający okno Eksplorator rozwiązań programu Visual Studio.

    Projekt samouczka kalkulatora zawiera węzeł plików nagłówkowych zawierający plik Calculator.h. Węzeł Pliki źródłowe zawiera Calculator.cpp i CalculatorTutorial.cpp. Węzły dla odwołań, zależności zewnętrznych i plików zasobów są widoczne, ale zamknięte.

    Plik można otworzyć, klikając go dwukrotnie w oknie Eksplorator rozwiązań. Kliknij dwukrotnie, Calculator.h aby go otworzyć.

  2. Zastąp zawartość Calculator.h następującym kodem, tak aby plik wyglądał następująco:

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

    Omówienie kodu

    • Ten kod deklaruje nową funkcję o nazwie Calculate, która służy do uruchamiania operacji matematycznych na potrzeby dodawania, odejmowania, mnożenia i dzielenia.
    • Kod C++ jest zorganizowany w pliki nagłówkowe (.h) i pliki źródłowe (.cpp). Kilka innych rozszerzeń plików jest obsługiwanych przez różne kompilatory, ale są to główne rozszerzenia, o których warto wiedzieć. Funkcje i zmienne są zwykle deklarowane, czyli nadane nazwę i typ, w plikach nagłówkowych i zaimplementowane, lub podane definicje, w plikach źródłowych. Aby uzyskać dostęp do kodu zdefiniowanego w innym pliku, możesz użyć polecenia #include "filename.h", gdzie filename.h jest nazwą pliku, który deklaruje zmienne lub funkcje, których chcesz użyć.
    • Dobrym rozwiązaniem jest zorganizowanie kodu w różne pliki w oparciu o to, co robi, dzięki czemu można łatwo znaleźć potrzebny kod później. W naszym przypadku zdefiniujemy klasę Calculator oddzielnie od pliku zawierającego main() funkcję, ale planujemy odwołać Calculator się do klasy w pliku .main()
  3. W obszarze Calculate pojawia się zielony przełącznik, ponieważ chociaż Calculate funkcja jest zadeklarowana, nie jest zdefiniowana. Zatrzymaj wskaźnik myszy na Calculate, kliknij strzałkę w dół na wyświetlonym śrubokręcie, a następnie wybierz pozycję Utwórz definicję polecenia "Oblicz" w pliku Calculator.cpp.

    Zrzut ekranu przedstawiający listę rozwijaną śrubokręta w oknie edytora programu Visual Studio. Opcja

    Ten kod jest dodawany do elementu Calculator.cpp:

    Zrzut ekranu edytora programu Visual Studio przedstawiający definicję funkcji ctor

    Definicja konstruktora to: double Calculator::Calculate( double x, char oper, double y) { return 0.0; }

    Obecnie zwraca tylko wartość 0,0. Zmieńmy to.

  4. Przejdź do Calculator.cpp pliku w oknie edytora. Zastąp zawartość elementu Calculator::Calculate(double x, char oper, double y) następującym kodem:

    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;
        }
    }
    

    Omówienie kodu

    • Funkcja Calculate używa liczby, operatora i drugiej liczby, a następnie wykonuje żądaną operację na liczbach.
    • Instrukcja switch sprawdza, który operator został podany, i wykonuje tylko przypadek odpowiadający tej operacji. Wartość domyślna: przypadek jest rezerwowym w przypadku, gdy użytkownik wpisze operator, który nie jest akceptowany, więc program nie zostanie przerwany. Ogólnie rzecz biorąc, najlepiej jest obsługiwać nieprawidłowe dane wejściowe użytkownika w bardziej elegancki sposób, ale wykracza to poza zakres tego samouczka.
    • Słowo double kluczowe określa typ liczby, która obsługuje liczby dziesiętne. Dzięki temu kalkulator może obsługiwać zarówno matematykę dziesiętną, jak i liczbę całkowitą. Funkcja Calculate jest wymagana, aby zawsze zwracać taką liczbę ze względu na double wartość na samym początku kodu (oznacza to typ zwracany przez funkcję), dlatego zwracamy wartość 0,0 nawet w przypadku domyślnym.
    • Plik .h deklaruje prototyp funkcji, który informuje kompilator z góry, jakich parametrów wymaga, i jakiego typu zwrotu oczekiwać od niego. Plik .cpp zawiera wszystkie szczegóły implementacji funkcji.

Jeśli w tym momencie skompilujesz i uruchomisz kod ponownie, natychmiast zakończy się po wywołaniu operacji do wykonania. Zmodyfikuj funkcję main , aby wykonywać wiele obliczeń.

Wywoływanie Calculator funkcji składowych klasy

  1. main Zaktualizuj funkcję w CalculatorTutorial.cpp następujący sposób:

    // 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;
    }
    

    Omówienie kodu

    • Ponieważ programy języka C++ zawsze zaczynają się od main() funkcji, musimy wywołać z tego miejsca nasz inny kod, więc #include potrzebna jest instrukcja.
    • Niektóre zmienne xpoczątkowe , , operyi result są zadeklarowane do przechowywania pierwszej liczby, drugiej liczby, operatora i wyniku końcowego odpowiednio. Zawsze dobrym rozwiązaniem jest nadanie im pewnych początkowych wartości, aby uniknąć niezdefiniowanego zachowania, co jest wykonywane tutaj.
    • Wiersz Calculator c; deklaruje obiekt o nazwie "c" jako wystąpienie Calculator klasy. Sama klasa jest tylko strategią sposobu działania kalkulatorów; obiekt jest konkretnym kalkulatorem, który wykonuje obliczenia matematyczne.
    • Instrukcja while (true) jest pętlą. Kod wewnątrz pętli będzie nadal wykonywany ponownie, o ile warunek w obiekcie () ma wartość true. Ponieważ warunek jest po prostu wymieniony jako true, jest zawsze prawdziwy, więc pętla jest uruchamiana na zawsze. Aby zamknąć program, użytkownik musi ręcznie zamknąć okno konsoli. W przeciwnym razie program zawsze czeka na nowe dane wejściowe.
    • Słowo cin kluczowe jest używane do akceptowania danych wejściowych od użytkownika. Ten strumień wejściowy jest wystarczająco inteligentny, aby przetworzyć wiersz tekstu wprowadzony w oknie konsoli i umieścić go wewnątrz każdej z wymienionych zmiennych, przy założeniu, że dane wejściowe użytkownika są zgodne z wymaganą specyfikacją. Można zmodyfikować ten wiersz tak, aby akceptował różne typy danych wejściowych, takich jak więcej niż dwie liczby — chociaż Calculate() funkcja również musi zostać zaktualizowana w celu obsługi tej funkcji.
    • Wyrażenie c.Calculate(x, oper, y); wywołuje zdefiniowaną Calculate wcześniej funkcję i dostarcza wprowadzone wartości wejściowe. Następnie funkcja zwraca liczbę, która jest przechowywana w pliku result.
    • Na koniec zostanie wydrukowany w konsoli, result więc użytkownik zobaczy wynik obliczenia.

Ponownie skompiluj i przetestuj kod

Teraz ponownie przetestuj program, aby upewnić się, że wszystko działa prawidłowo.

  1. Naciśnij klawisze Ctrl+F5 , aby ponownie skompilować i uruchomić aplikację.

  2. Wprowadź klawisz 5+5, a następnie naciśnij klawisz Enter. Sprawdź, czy wynik to 10.

    Zrzut ekranu przedstawiający okno polecenia z wynikami uruchamiania programu.

    Aplikacja wyświetli komunikat: Wprowadź operację do wykonania. Format: a+b | a-b | a*b | a/b. Użytkownik wprowadził wartość 5+5. Dane wyjściowe aplikacji: wynik 5+5 to: 10

Debugowanie aplikacji

Ponieważ użytkownik może wpisać dowolne dane w oknie konsoli, upewnij się, że kalkulator obsługuje nieoczekiwane dane wejściowe. Zamiast uruchamiać program, zdebubujmy go, abyśmy mogli sprawdzić, co robi krok po kroku.

Uruchamianie aplikacji w debugerze

  1. W CalcuatorTutorial.cpppliku ustaw punkt przerwania w wierszu: result = c.Calculate(x, oper, y);. Aby ustawić punkt przerwania, kliknij obok wiersza na szarym pasku pionowym wzdłuż lewej krawędzi okna edytora. Zostanie wyświetlona czerwona kropka.

    Zrzut ekranu przedstawiający edytor programu Visual Studio. Czerwona kropka reprezentująca punkt przerwania pojawia się w wierszu: result = c.Calculate(x, oper, y).

    Teraz, gdy debugujemy program, wykonywanie jest wstrzymywane w tym wierszu. Mamy już szorstki pomysł, że program działa w prostych przypadkach. Ponieważ nie chcemy wstrzymywać wykonywania za każdym razem, gdy wywołujemy Calculate()metodę , utwórzmy warunkowy punkt przerwania.

  2. Kliknij prawym przyciskiem myszy czerwoną kropkę reprezentującą punkt przerwania, a następnie wybierz pozycję Warunki. W polu edycji warunku wprowadź .(y == 0) && (oper == '/') Wybierz przycisk Zamknij, aby zapisać warunek punktu przerwania.

    Zrzut ekranu programu Visual Studio przedstawiający wyskakujące okienko punkt przerwania Ustawienia.

    Warunek punktu przerwania to: y==0 && oper == "/" Jest prawdziwe.

    Teraz wykonanie zostanie wstrzymane w punkcie przerwania, gdy aplikacja próbuje podzielić przez 0.

  3. Aby debugować program, naciśnij klawisz F5 lub wybierz przycisk paska narzędzi Lokalne debugera systemu Windows z zieloną strzałką. Jeśli w aplikacji konsolowej wprowadzisz wartość podobną do "5–0", program zachowuje się normalnie i działa. Jeśli jednak wpiszesz wartość "10/0", zostanie wstrzymana w punkcie przerwania. Można umieścić dowolną liczbę spacji między operatorem a liczbami: cin jest wystarczająco inteligentna, aby odpowiednio przeanalizować dane wejściowe.

    Zrzut ekranu edytora programu Visual Studio. Wykonywanie programu zatrzymane w warunkowym punkcie przerwania w wierszu: result = c.Calculate(x, oper, y);.

Przydatne okna w debugerze

Podczas debugowania kodu można zauważyć, że pojawią się nowe okna. Te okna mogą pomóc w debugowaniu. Zapoznaj się z oknem Automatyczne . W oknie Autos (Autos ) są wyświetlane bieżące wartości zmiennych używanych co najmniej trzy wiersze przed i do bieżącego wiersza.

Zrzut ekranu przedstawiający okno Autos debugera programu Visual Studio.

Wartość operacji wynosi 47 "/", wynik wynosi 5, x to 10, a y to 0.

Aby wyświetlić wszystkie zmienne z tej funkcji, przejdź do okna Ustawienia lokalne . Wartości tych zmiennych można modyfikować podczas debugowania, aby zobaczyć, jaki wpływ miałoby to na program. W tym przypadku pozostawiamy je w spokoju.

Zrzut ekranu przedstawiający okno Ustawienia lokalne w programie Visual Studio z wyświetlonymi bieżącymi wartościami zmiennych lokalnych podczas debugowania.

Wartość operacji wynosi 47 '/', wynik wynosi 0, x jest 10, a y to 0.

Możesz również umieścić wskaźnik myszy na zmiennych w kodzie, aby zobaczyć ich bieżące wartości w punkcie, w którym wykonywanie jest obecnie wstrzymane. Upewnij się, że okno edytora jest w centrum uwagi, klikając go najpierw.

Zrzut ekranu przedstawiający etykietkę narzędzia z wartością zmiennej

Kontynuuj debugowanie

  1. Żółta strzałka po lewej stronie pokazuje bieżący punkt wykonywania. Bieżący wiersz wywołuje metodę Calculate, więc naciśnij klawisz F11, aby przejść do funkcji . Teraz wykonujesz kod w treści Calculate funkcji. Należy zachować ostrożność, ponieważ wykonuje kroki we wszystkich funkcjach w wierszu, w tym standardowych funkcji biblioteki. Warto przejść do standardowej biblioteki, ale być może bardziej interesuje Cię skupienie się na kodzie zamiast kodu biblioteki.

  2. Teraz, gdy punkt wykonywania znajduje się na początku Calculate funkcji, naciśnij klawisz F10 , aby przejść do następnego wiersza w wykonaniu programu. F10 jest również znany jako Step Over. Aby przejść od wiersza do wiersza, możesz użyć kroków do przejścia bez zagłębiania się w szczegóły tego, co dzieje się w każdej części wiersza. Ogólnie rzecz biorąc, należy użyć instrukcji Step Over zamiast Step Into, chyba że chcesz bardziej szczegółowo zapoznać się z kodem wywoływanym z innego miejsca (tak jak w przypadku dotarcia do treści Calculateobiektu ).

  3. Kontynuuj korzystanie z klawisza F10 , aby przejść do każdego wiersza, dopóki nie wrócisz do main() funkcji w innym pliku i zatrzymaj się w cout wierszu.

    Program robi to, czego oczekuje się: przyjmuje pierwszą liczbę i dzieli ją przez drugą. cout W wierszu umieść kursor nad zmienną result lub przyjrzyj się w resultoknie Autos. Jego wartość inf, która nie wygląda prawidłowo, więc poprawmy ją. Wiersz cout generuje tylko dowolną wartość przechowywaną w resultpliku , więc po kroku jeszcze jeden wiersz do przodu przy użyciu klawisza F10 zostanie wyświetlone okno konsoli:

    Zrzut ekranu przedstawiający konsolę debugowania programu Visual Studio z wynikiem operacji dzielenia według zera.

    Dane wyjściowe aplikacji: wprowadź operację do wykonania. Format: a+b | a-b | a*b | a/b. Użytkownik wprowadził wartość 5-0. Dane wyjściowe aplikacji: Wynik: 5. Użytkownik THe wprowadził 10/0. Dane wyjściowe aplikacji: Wynik: inf

    Jest to spowodowane tym, że dzielenie według zera jest niezdefiniowane, więc program nie ma liczbowej odpowiedzi dla żądanej operacji.

Naprawiono błąd "podziel przez zero"

Obsłużmy dzielenie przez zero bardziej bezpiecznie, aby ułatwić użytkownikowi zrozumienie problemu.

  1. Wprowadź następujące zmiany w pliku CalculatorTutorial.cpp. (Możesz pozostawić program uruchomiony podczas edycji, dzięki funkcji debugera o nazwie Edytuj i kontynuuj). Dodaj instrukcję if poniżej cin >> x >> oper >> y; , aby sprawdzić podział według zera i wyświetlić komunikat do użytkownika, jeśli tak się stanie. W przeciwnym razie zostanie wydrukowany wynik.

    // 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 << "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. Naciśnij klawisz F5 raz. Wykonywanie programu jest kontynuowane aż do momentu wstrzymania, aby poprosić o podanie danych wejściowych użytkownika. Wprowadź 10 / 0 ponownie. Teraz zostanie wydrukowany bardziej pomocny komunikat. Użytkownik jest proszony o więcej danych wejściowych, a program kontynuuje normalne wykonywanie.

    Zrzut ekranu przedstawiający okno konsoli przedstawiające końcowe dane wyjściowe po zaimplementowaniu zmian w celu obsługi dzielenia według zera.

    W oknie konsoli są wyświetlane dwa wiersze: 10/0 Wynik: inf, a następnie 10/0 Błąd matematyczny: Podjęto próbę podzielenia przez zero.

    Uwaga

    Podczas edytowania kodu w trybie debugowania istnieje ryzyko, że kod staje się nieaktualny. Dzieje się tak, gdy debuger nadal uruchamia stary kod i nie zaktualizował go wraz ze zmianami. Debuger wyświetla okno dialogowe informujące o tym, kiedy tak się stanie. Czasami może być konieczne naciśnięcie klawisza F5 , aby odświeżyć wykonywany kod. W szczególności, jeśli wprowadzisz zmianę wewnątrz funkcji, gdy punkt wykonywania znajduje się wewnątrz tej funkcji, musisz wyjść z funkcji, a następnie wrócić do niej ponownie, aby uzyskać zaktualizowany kod. Jeśli to nie zadziała i zostanie wyświetlony komunikat o błędzie, możesz zatrzymać debugowanie, klikając czerwony kwadrat na pasku narzędzi w menu w górnej części środowiska IDE, a następnie ponownie rozpocznij debugowanie, wprowadzając klawisz F5 lub wybierając zieloną strzałkę "odtwórz" obok przycisku zatrzymania na pasku narzędzi.

    Kolejna przyczyna edytowania i kontynuowania może zakończyć się niepowodzeniem, jeśli zostanie wyświetlony komunikat "Wymagaj plików źródłowych, aby dokładnie dopasować ustawienie wersji oryginalnej w obszarze Debug-Options-General>> musi być włączone..." Aby rozwiązać ten problem, w menu głównym wybierz pozycję Narzędzia>Opcje>Debugowanie>ogólne i upewnij się, że opcja Wymagaj plików źródłowych do dokładnego dopasowania do oryginalnej wersji jest zaznaczona.

    Opis skrótów Uruchamiania i debugowania

    • F5 (lub Debuguj>rozpocznij debugowanie debugowania) uruchamia sesję debugowania, jeśli nie jest jeszcze aktywna, i uruchamia program do momentu trafienia punktu przerwania lub program potrzebuje danych wejściowych użytkownika. Jeśli żadne dane wejściowe użytkownika nie są potrzebne i żaden punkt przerwania nie jest dostępny, program zakończy działanie, a okno konsoli zostanie zamknięte po zakończeniu działania programu. Jeśli masz do uruchomienia program "Hello World", użyj klawiszy Ctrl+F5 lub ustaw punkt przerwania przed naciśnięciem klawisza F5 , aby zachować otwarte okno.
    • Ctrl+F5 (lub Debuguj>uruchamianie bez debugowania) uruchamia aplikację bez przechodzenia do trybu debugowania. Jest to nieco szybsze niż debugowanie, a okno konsoli pozostaje otwarte po zakończeniu wykonywania programu.
    • Klawisz F10 (znany jako krok po kroku) umożliwia iterowanie kodu, wiersz po wierszu i wizualizowanie sposobu uruchamiania kodu oraz wartości zmiennych w każdym kroku wykonywania.
    • Klawisz F11 (znany jako Krok do) działa podobnie do krok po kroku, z wyjątkiem kroków w dowolnych funkcjach wywoływanych w wierszu wykonywania. Jeśli na przykład wykonywany wiersz wywołuje funkcję, naciśnięcie klawisza F11 przenosi wskaźnik do treści funkcji, aby można było postępować zgodnie z kodem funkcji uruchamianym przed powrotem do wiersza uruchomionego pod adresem . Naciśnięcie klawisza F10 przez wywołanie funkcji i przejście do następnego wiersza; nadal odbywa się wywołanie funkcji, ale program nie wstrzymuje się, aby pokazać, co robi.

Zamknięcie aplikacji

  • Jeśli nadal działa, zamknij okno konsoli aplikacji kalkulatora.

Dodawanie kontroli źródła usługi Git

Po utworzeniu aplikacji możesz dodać ją do repozytorium Git. Pomożemy Ci. Program Visual Studio ułatwia ten proces za pomocą narzędzi Git, których można używać bezpośrednio ze środowiska IDE.

Napiwek

Git to najczęściej używany nowoczesny system kontroli wersji, więc niezależnie od tego, czy jesteś profesjonalnym deweloperem, czy uczysz się kodować, usługa Git może być bardzo przydatna. Jeśli dopiero zaczynasz pracę z usługą Git, https://git-scm.com/ witryna internetowa jest dobrym miejscem do rozpoczęcia. Tam można znaleźć ściągawki, popularną książkę online i filmy git Basics.

Aby skojarzyć kod z usługą Git, zacznij od utworzenia nowego repozytorium Git, w którym znajduje się kod. Oto, jak to zrobić:

  1. Na pasku stanu w prawym dolnym rogu programu Visual Studio wybierz pozycję Dodaj do kontroli źródła, a następnie wybierz pozycję Git.

    Zrzut ekranu przedstawiający przyciski kontroli źródła usługi Git poniżej okienka Eksplorator rozwiązań z wyróżnionym przyciskiem Dodaj do kontroli źródła.

  2. W oknie dialogowym Tworzenie repozytorium Git zaloguj się do usługi GitHub.

    Zrzut ekranu przedstawiający okno dialogowe Tworzenie repozytorium Git, w którym tworzysz nowe repozytorium GitHub.

    Nazwa repozytorium jest wypełniana automatycznie na podstawie lokalizacji folderu. Domyślnie nowe repozytorium jest prywatne, co oznacza, że jesteś jedynym, który może uzyskać do niego dostęp.

    Napiwek

    Niezależnie od tego, czy repozytorium jest publiczne, czy prywatne, najlepiej mieć zdalną kopię zapasową kodu przechowywanego bezpiecznie w usłudze GitHub. Nawet jeśli nie pracujesz z zespołem, repozytorium zdalne udostępnia ci kod z dowolnego komputera.

  3. Wybierz pozycję Utwórz i wypchnij.

    Po utworzeniu repozytorium na pasku stanu zostaną wyświetlone szczegóły stanu.

    Zrzut ekranu przedstawiający pasek stanu repozytorium znajdujący się poniżej okienka Eksplorator rozwiązań programu Visual Studio z wyświetloną nazwą gałęzi i liczbą zaległych zmian.

    Pierwsza ikona ze strzałkami pokazuje liczbę zatwierdzeń wychodzących/przychodzących w bieżącej gałęzi. Możesz użyć tej ikony, aby ściągnąć wszystkie zatwierdzenia przychodzące lub wypchnąć dowolne zatwierdzenia wychodzące. Możesz również najpierw wyświetlić te zatwierdzenia. W tym celu wybierz ikonę, a następnie wybierz pozycję Wyświetl wychodzące/przychodzące.

    Druga ikona z ołówkiem pokazuje liczbę niezatwierdzonych zmian w kodzie. Możesz wybrać tę ikonę, aby wyświetlić te zmiany w oknie Zmiany usługi Git.

Aby dowiedzieć się więcej na temat korzystania z usługi Git z aplikacją, zobacz dokumentację kontroli wersji programu Visual Studio.

Zakończona aplikacja

Gratulacje! Ukończono kod aplikacji kalkulatora, skompilowany i debugowany oraz dodano go do repozytorium — wszystko w programie Visual Studio.

Następne kroki

Dowiedz się więcej o programie Visual Studio dla języka C++

Zwykle punktem wyjścia dla programisty języka C++ jest aplikacja "Hello, world!", która działa w wierszu polecenia. Zaczynasz od tego w tym artykule, a następnie przechodzimy do czegoś trudniejszego: aplikacji kalkulatora.

Wymagania wstępne

Tworzenie projektu aplikacji

Program Visual Studio używa projektów do organizowania kodu dla aplikacji i rozwiązań w celu organizowania co najmniej jednego projektu. Projekt zawiera wszystkie opcje, konfiguracje i reguły używane do tworzenia aplikacji. Zarządza również relacją między wszystkimi plikami projektu i plikami zewnętrznymi. Aby utworzyć aplikację, najpierw utwórz nowy projekt i rozwiązanie.

  1. Na pasku menu w programie Visual Studio wybierz pozycję Plik>nowy>projekt. Zostanie otwarte okno Nowy projekt .

  2. Na lewym pasku bocznym upewnij się, że wybrano pozycję Visual C++ . W środku wybierz pozycję Aplikacja konsolowa systemu Windows.

  3. W polu tekstowym Name (Nazwa) w dolnej części nadaj nowej nazwie nazwę CalculatorTutorial projektu, a następnie wybierz przycisk OK.

    Zrzut ekranu przedstawiający okno dialogowe Nowy projekt. Wybrano typ projektu Aplikacja konsolowa systemu Windows. Pole tekstowe Nazwa ustawione na CalculatorTutorial.

    Zostanie utworzona pusta aplikacja konsolowa systemu Windows w języku C++ "Hello World". Aplikacje konsolowe używają okna konsoli systemu Windows do wyświetlania danych wyjściowych i akceptowania danych wejściowych użytkownika. W programie Visual Studio zostanie otwarte okno edytora z wyświetlonym wygenerowanym kodem:

    // 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
    

Sprawdź, czy nowa aplikacja kompiluje i uruchamia

Szablon nowej aplikacji konsolowej systemu Windows tworzy prostą aplikację "Hello World" w języku C++. W tym momencie możesz zobaczyć, jak program Visual Studio kompiluje i uruchamia aplikacje tworzone bezpośrednio ze środowiska IDE.

  1. Aby skompilować projekt, wybierz pozycję Kompiluj rozwiązanie z menu Kompilacja . W oknie Dane wyjściowe są wyświetlane wyniki procesu kompilacji.

    Zrzut ekranu przedstawiający okno Dane wyjściowe programu Visual Studio pokazujące, że kompilacja zakończyła się pomyślnie.

  2. Aby uruchomić kod, na pasku menu wybierz pozycję Debuguj, Rozpocznij bez debugowania (Ctrl+F5).

    Zrzut ekranu przedstawiający konsolę debugowania programu Visual Studio z danymi wyjściowymi: Hello World!.

    Zostanie otwarte okno konsoli, a następnie uruchomi aplikację.

    Po uruchomieniu aplikacji konsolowej w programie Visual Studio zostanie uruchomiony kod, a następnie wyświetli komunikat "Naciśnij dowolny klawisz, aby zamknąć to okno. . ." w celu wyświetlenia danych wyjściowych.

    Gratulacje! Utworzono pierwszą aplikację konsolową "Hello, world!" w programie Visual Studio!

  3. Naciśnij klawisz, aby zamknąć okno konsoli i wrócić do programu Visual Studio.

Teraz masz narzędzia do kompilowania i uruchamiania aplikacji po każdej zmianie, aby sprawdzić, czy kod nadal działa zgodnie z oczekiwaniami. Później pokażemy, jak go debugować, jeśli nie.

Edytowanie kodu

Teraz zmieńmy kod w tym szablonie, aby był aplikacją kalkulatora.

  1. Zastąp zawartość CalculatorTutorial.cpp pliku następującym kodem, tak aby był zgodny z tym przykładem:

    // 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
    

    Opis kodu:

    • Instrukcje #include umożliwiają odwołanie do kodu znajdującego się w innych plikach. Czasami może być widoczna nazwa pliku otoczona nawiasami kątowymi (<>); czasami jest otoczona cudzysłowami (" ). Ogólnie rzecz biorąc, nawiasy kątowe są używane podczas odwoływania się do standardowej biblioteki języka C++, podczas gdy cudzysłowy są używane dla innych plików.
    • Wiersz using namespace std; informuje kompilator o oczekiwaniu użycia elementów z standardowej biblioteki języka C++ w tym pliku. Bez tego wiersza każde słowo kluczowe z biblioteki musi być poprzedzone std:: , aby oznaczyć jego zakres. Na przykład bez tego wiersza każde odwołanie cout musi być napisane jako std::cout. Instrukcja using jest dodawana w celu zwiększenia czytelnego wyglądu kodu.
    • Słowo cout kluczowe służy do drukowania do standardowych danych wyjściowych w języku C++. Operator *<< nakazuje kompilatorowi wysłanie dowolnego elementu z prawej strony do standardowych danych wyjściowych.
    • Słowo kluczowe jest podobne do klawisza endl Enter; kończy wiersz i przenosi kursor do następnego wiersza. Lepszym rozwiązaniem jest umieszczenie \n wewnątrz ciągu (zawartego przez ""), aby zrobić to samo, ponieważ endl zawsze opróżnia bufor i może zaszkodzić wydajności programu. Ale ponieważ jest to bardzo mała aplikacja, endl jest używana zamiast tego w celu zapewnienia lepszej czytelności.
    • Wszystkie instrukcje języka C++ muszą kończyć się średnikami, a wszystkie aplikacje języka C++ muszą zawierać main() funkcję. Ta funkcja jest tym, co program jest uruchamiany na początku. Aby można było używać wszystkich kodów, musi być dostępny.main()
  2. Aby zapisać plik, naciśnij klawisze Ctrl+S lub wybierz ikonę Zapisz w górnej części środowiska IDE, ikonę dyskietki na pasku narzędzi pod paskiem menu.

  3. Aby uruchomić aplikację, naciśnij klawisze Ctrl+F5 lub przejdź do menu Debugowanie i wybierz pozycję Rozpocznij bez debugowania. Jeśli pojawi się wyskakujące okienko z informacją Ten projekt jest nieaktualny, możesz wybrać pozycję Nie pokazuj tego okna dialogowego ponownie, a następnie wybrać pozycję Tak , aby skompilować aplikację. Powinno zostać wyświetlone okno konsoli, w którym zostanie wyświetlony tekst określony w kodzie.

    Wideo przedstawiające proces uruchamiania aplikacji kalkulatora w środowisku IDE.

    Najpierw zostanie wyświetlone okno dialogowe z pytaniem, czy utworzyć projekt, ponieważ projekt jest nieaktualny. Pole wyboru "Nie pokazuj ponownie tego okna dialogowego" jest zaznaczone. Opcja "Tak" jest wybierana do skompilowania projektu, kompilacji projektu kalkulatora, a następnie zostanie uruchomiona w oknie konsoli systemu Windows.

  4. Po zakończeniu zamknij okno konsoli.

Dodawanie kodu w celu wykonania pewnych obliczeń matematycznych

Klasa jest jak strategia dla obiektu, który coś robi. W tym przypadku zdefiniujemy klasę kalkulatora zawierającą logikę matematyczną.

Dodawanie klasy Kalkulator

  1. Przejdź do menu Project (Projekt) i wybierz pozycję Add Class (Dodaj klasę). W polu Edycja nazwy klasy wprowadź Kalkulator. Wybierz przycisk OK.

    Wideo przedstawiające użytkownika otwierającego okno dialogowe Dodawanie klasy, wpisując

    Klasa jest jak strategia dla obiektu, który coś robi. W tym przypadku zdefiniujemy kalkulator i sposób jego działania.

    Dwa nowe pliki są dodawane do projektu. Aby zapisać wszystkie zmienione pliki jednocześnie, naciśnij klawisze Ctrl+Shift+S. Jest to skrót klawiaturowy do zapisywania wszystkich plików>. Istnieje również przycisk paska narzędzi Dla opcji Zapisz wszystko, ikona dwóch dyskietek znajdujących się obok przycisku Zapisz . Ogólnie rzecz biorąc, dobrym rozwiązaniem jest częste zapisywanie wszystkich , więc nie pomijasz żadnych plików podczas zapisywania.

    Kreator Dodawania klasy tworzy .h pliki i .cpp pliki, które mają taką samą nazwę jak klasa. Pełną listę plików projektu można wyświetlić w oknie Eksplorator rozwiązań widocznym po stronie środowiska IDE. Jeśli okno nie jest widoczne, możesz go otworzyć na pasku menu: wybierz pozycję Widok> Eksplorator rozwiązań.

    Zrzut ekranu przedstawiający okno Eksplorator rozwiązań programu Visual Studio.

    Projekt samouczka kalkulatora zawiera węzeł plików nagłówków zawierający calculator.h, stdafx.h i targetver.h. Węzeł Pliki źródłowe zawiera Calculator.cpp, CalculatorTutorial.cpp i stdafx.cpp. Węzły dla odwołań, zależności zewnętrznych i plików zasobów są widoczne, ale zamknięte.

    Plik można otworzyć, klikając go dwukrotnie w oknie Eksplorator rozwiązań. Kliknij dwukrotnie, Calculator.h aby go otworzyć.

  2. Zastąp zawartość Calculator.h następującym kodem, tak aby plik wyglądał następująco:

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

    Omówienie kodu

    • Ten kod deklaruje nową funkcję o nazwie Calculate, która służy do uruchamiania operacji matematycznych na potrzeby dodawania, odejmowania, mnożenia i dzielenia.
    • Kod C++ jest zorganizowany w pliki nagłówkowe (.h) i pliki źródłowe (.cpp). Kilka innych rozszerzeń plików jest obsługiwanych przez różne kompilatory, ale są to główne rozszerzenia, o których warto wiedzieć. Funkcje i zmienne są zwykle deklarowane, czyli nadane nazwę i typ, w plikach nagłówkowych i zaimplementowane, lub podane definicje, w plikach źródłowych. Aby uzyskać dostęp do kodu zdefiniowanego w innym pliku, możesz użyć polecenia #include "filename.h", gdzie filename.h jest nazwą pliku, który deklaruje zmienne lub funkcje, których chcesz użyć.
    • Dobrym rozwiązaniem jest zorganizowanie kodu w różne pliki w oparciu o to, co robi, dzięki czemu można łatwo znaleźć potrzebny kod później. W naszym przypadku zdefiniujemy klasę Calculator oddzielnie od pliku zawierającego main() funkcję, ale planujemy odwołać Calculator się do klasy w pliku .main()
  3. W obszarze Calculate pojawia się zielony przełącznik, ponieważ chociaż Calculate funkcja jest zadeklarowana, nie jest zdefiniowana. Zatrzymaj wskaźnik myszy na Calculate, kliknij strzałkę w dół na wyświetlonym śrubokręcie, a następnie wybierz pozycję Utwórz definicję polecenia "Oblicz" w pliku Calculator.cpp. Zostanie wyświetlone wyskakujące okienko, które daje wgląd w zmianę kodu, która została wprowadzona w innym pliku. Kod został dodany do elementu Calculator.cpp.

    Wideo przedstawiające używanie listy rozwijanej żarówki, aby wybrać pozycję Utwórz definicję funkcji Oblicz w Calculator.cpp.

    Obecnie zwraca tylko wartość 0,0. Zmieńmy to. Naciśnij klawisz Esc , aby zamknąć wyskakujące okienko.

  4. Przejdź do Calculator.cpp pliku w oknie edytora. Zastąp zawartość pliku następującym kodem:

    #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;
        }
    }
    

    Omówienie kodu

    • Funkcja Calculate używa liczby, operatora i drugiej liczby, a następnie wykonuje żądaną operację na liczbach.
    • Instrukcja switch sprawdza, który operator został podany, i wykonuje tylko przypadek odpowiadający tej operacji. Wartość domyślna: przypadek jest rezerwowym w przypadku, gdy użytkownik wpisze operator, który nie jest akceptowany, więc program nie zostanie przerwany. Ogólnie rzecz biorąc, najlepiej jest obsługiwać nieprawidłowe dane wejściowe użytkownika w bardziej elegancki sposób, ale wykracza to poza zakres tego samouczka.
    • Słowo double kluczowe określa typ liczby, która obsługuje liczby dziesiętne. Dzięki temu kalkulator może obsługiwać zarówno matematykę dziesiętną, jak i liczbę całkowitą. Funkcja Calculate jest wymagana, aby zawsze zwracać taką liczbę ze względu na double wartość na samym początku kodu (oznacza to typ zwracany przez funkcję), dlatego zwracamy wartość 0,0 nawet w przypadku domyślnym.
    • Plik .h deklaruje prototyp funkcji, który informuje kompilator z góry, jakich parametrów wymaga, i jakiego typu zwrotu oczekiwać od niego. Plik .cpp zawiera wszystkie szczegóły implementacji funkcji.

Jeśli utworzysz i uruchomisz kod ponownie w tym momencie, nadal zakończy się po zapytaniu, która operacja ma zostać wykonana. Następnie zmodyfikuj main funkcję, aby wykonać pewne obliczenia.

Wywoływanie funkcji składowych klasy Calculator

  1. Teraz zaktualizujmy main funkcję w pliku 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;
    }
    

    Omówienie kodu

    • Ponieważ programy języka C++ zawsze zaczynają się od main() funkcji, musimy wywołać z tego miejsca nasz inny kod, więc #include potrzebna jest instrukcja.
    • Niektóre zmienne xpoczątkowe , , operyi result są zadeklarowane do przechowywania pierwszej liczby, drugiej liczby, operatora i wyniku końcowego odpowiednio. Zawsze dobrym rozwiązaniem jest nadanie im pewnych początkowych wartości, aby uniknąć niezdefiniowanego zachowania, co jest wykonywane tutaj.
    • Wiersz Calculator c; deklaruje obiekt o nazwie "c" jako wystąpienie Calculator klasy. Sama klasa jest tylko strategią sposobu działania kalkulatorów; obiekt jest konkretnym kalkulatorem, który wykonuje obliczenia matematyczne.
    • Instrukcja while (true) jest pętlą. Kod wewnątrz pętli będzie nadal wykonywany ponownie, o ile warunek w obiekcie () ma wartość true. Ponieważ warunek jest po prostu wymieniony jako true, jest zawsze prawdziwy, więc pętla jest uruchamiana na zawsze. Aby zamknąć program, użytkownik musi ręcznie zamknąć okno konsoli. W przeciwnym razie program zawsze czeka na nowe dane wejściowe.
    • Słowo cin kluczowe jest używane do akceptowania danych wejściowych od użytkownika. Ten strumień wejściowy jest wystarczająco inteligentny, aby przetworzyć wiersz tekstu wprowadzony w oknie konsoli i umieścić go wewnątrz każdej z wymienionych zmiennych, przy założeniu, że dane wejściowe użytkownika są zgodne z wymaganą specyfikacją. Można zmodyfikować ten wiersz tak, aby akceptował różne typy danych wejściowych, takich jak więcej niż dwie liczby — chociaż Calculate() funkcja również musi zostać zaktualizowana w celu obsługi tej funkcji.
    • Wyrażenie c.Calculate(x, oper, y); wywołuje zdefiniowaną Calculate wcześniej funkcję i dostarcza wprowadzone wartości wejściowe. Następnie funkcja zwraca liczbę, która jest przechowywana w pliku result.
    • Na koniec zostanie wydrukowany w konsoli, result więc użytkownik zobaczy wynik obliczenia.

Ponownie skompiluj i przetestuj kod

Ponownie przetestuj program, aby upewnić się, że wszystko działa prawidłowo.

  1. Naciśnij klawisze Ctrl+F5 , aby ponownie skompilować i uruchomić aplikację.

  2. Wprowadź klawisz 5+5, a następnie naciśnij klawisz Enter. Sprawdź, czy wynik to 10.

    Zrzut ekranu przedstawiający okno polecenia z uruchomioną aplikacją Kalkulator. Pokazuje, że wynik 5 + 5 wynosi 10.

Debugowanie aplikacji

Ponieważ użytkownik może wpisać dowolne dane w oknie konsoli, upewnij się, że kalkulator obsługuje nieoczekiwane dane wejściowe. Zamiast uruchamiać program, zdebubujmy go zamiast tego, abyśmy mogli sprawdzić, co robi krok po kroku.

Uruchamianie aplikacji w debugerze

  1. W CalcuatorTutorial.cpppliku ustaw punkt przerwania w result = c.Calculate(x, oper, y); wierszu. Aby ustawić punkt przerwania, kliknij obok wiersza na szarym pasku pionowym wzdłuż lewej krawędzi okna edytora. Zostanie wyświetlona czerwona kropka.

    Wideo przedstawiające użytkownika ustawienie punktu przerwania w wierszu 25: result = c.Calculate(x, oper, y);.

    Teraz, gdy debugujemy program, zawsze wstrzymuje wykonywanie w tym wierszu. Mamy już szorstki pomysł, że program działa w prostych przypadkach. Ponieważ nie chcemy za każdym razem wstrzymywać wykonywania, utwórzmy warunkowy punkt przerwania.

  2. Kliknij prawym przyciskiem myszy czerwoną kropkę reprezentującą punkt przerwania, a następnie wybierz pozycję Warunki. W polu edycji warunku wprowadź .(y == 0) && (oper == '/') Po zakończeniu wybierz przycisk Zamknij , aby zapisać warunek punktu przerwania.

    Wideo przedstawiające proces ustawiania warunkowego punktu przerwania.

    Punkt przerwania znajduje się w wierszu: result = c dot Calculate ( x, oper, y). "Warunki..." jest zaznaczona na liście rozwijanej punkt przerwania, co spowoduje otwarcie okna ustawień punktu przerwania. Opcja Warunek jest zaznaczona, poniżej której listy rozwijane są ustawione jako: "Wyrażenie warunkowe" i "Jest prawdziwe". Użytkownik wprowadza y == 0 && oper == '/' w polu tekstowym warunek, a następnie wybiera blisko, aby ustawić warunkowy punkt przerwania.

    Teraz wstrzymujemy wykonywanie w punkcie przerwania, jeśli zostanie podjęta próba dzielenia o 0.

  3. Aby debugować program, naciśnij klawisz F5 lub wybierz przycisk paska narzędzi Lokalne debugera systemu Windows z zieloną strzałką. Jeśli w aplikacji konsolowej wprowadzisz wartość podobną do "5–0", program zachowuje się normalnie i działa. Jeśli jednak wpiszesz wartość "10/0", zostanie wstrzymana w punkcie przerwania. Można nawet umieścić dowolną liczbę spacji między operatorem a liczbami; cin jest wystarczająco inteligentny, aby odpowiednio przeanalizować dane wejściowe.

    Wideo przedstawiające wykonanie programu wstrzymane w punkcie przerwania warunkowego.

    Użytkownik wprowadza wartość 5–0. Dane wyjściowe aplikacji: wynik to 5. Następnie użytkownik wprowadza wartość 10/0 i ponieważ warunek warunkowego punktu przerwania jest spełniony, wykonanie zatrzymuje się w wierszu: result = c.Calculate(x, oper, y);

Przydatne okna w debugerze

Podczas debugowania kodu można zauważyć, że pojawią się nowe okna. Te okna mogą pomóc w debugowaniu. Zapoznaj się z oknem Automatyczne . W oknie Autos (Autos ) są wyświetlane bieżące wartości zmiennych używanych co najmniej trzy wiersze przed i do bieżącego wiersza.

Zrzut ekranu przedstawiający okno Autos debugera programu Visual Studio.

Wartość operacji wynosi 47 "/", wynik wynosi 5, x to 10, a y to 0.

Aby wyświetlić wszystkie zmienne z tej funkcji, przejdź do okna Ustawienia lokalne . Możesz zmodyfikować wartości tych zmiennych podczas debugowania, aby zobaczyć, jaki wpływ miałoby to na program. W tym przypadku pozostawiamy je w spokoju.

Zrzut ekranu przedstawiający okno Ustawienia lokalne w programie Visual Studio z wyświetlonymi bieżącymi wartościami zmiennych lokalnych podczas debugowania.

Wartość operacji wynosi 47 '/', wynik wynosi 0, x jest 10, a y to 0.

Możesz również umieścić kursor nad zmiennymi w samym kodzie, aby zobaczyć ich bieżące wartości, w których wykonywanie jest obecnie wstrzymane. Upewnij się, że okno edytora jest w centrum uwagi, klikając go najpierw.

Wideo przedstawiające etykietkę narzędzia wyświetlaną podczas umieszczania wskaźnika myszy na zmiennej y. Wyświetla bieżącą wartość y, czyli 0.

Kontynuuj debugowanie

  1. Żółta strzałka po lewej stronie pokazuje bieżący punkt wykonywania. Bieżący wiersz wywołuje Calculatemetodę , dlatego naciśnij klawisz F11, aby przejść do funkcji , co spowoduje przejście do treści Calculate funkcji. Należy zachować ostrożność, ponieważ wykonuje kroki we wszystkich funkcjach w wierszu, w tym standardowych funkcji biblioteki. Warto przejść do standardowej biblioteki, ale być może bardziej interesuje Cię skupienie się na kodzie zamiast kodu biblioteki.

  2. Teraz, gdy punkt wykonywania znajduje się na początku Calculate funkcji, naciśnij klawisz F10 , aby przejść do następnego wiersza w wykonaniu programu. F10 jest również znany jako Step Over. Aby przejść od wiersza do wiersza, możesz użyć kroków do przejścia bez zagłębiania się w szczegóły tego, co dzieje się w każdej części wiersza. Ogólnie rzecz biorąc, należy użyć instrukcji Step Over zamiast Step Into, chyba że chcesz bardziej szczegółowo zapoznać się z kodem wywoływanym z innego miejsca (tak jak w przypadku dotarcia do treści Calculateobiektu ).

  3. Kontynuuj korzystanie z klawisza F10 , aby przejść do każdego wiersza, dopóki nie wrócisz do main() funkcji w innym pliku i zatrzymaj się w cout wierszu.

    Wideo przedstawiające przechodzenie między poszczególnymi wierszami kodu w funkcji Calculate.

    Każdy wiersz kodu w funkcji Calculate jest przesunął się, aż kontrolka powróci do funkcji main. Następnie użytkownik umieści wskaźnik myszy na zmiennej o nazwie result, aby zobaczyć jej wartość, czyli: inf".

    Program robi to, czego oczekuje się: przyjmuje pierwszą liczbę i dzieli ją przez drugą. cout W wierszu umieść kursor nad zmienną result lub przyjrzyj się w resultoknie Autos. Jego wartość to inf, która nie wygląda prawidłowo, więc poprawmy ją. Wiersz cout generuje tylko dowolną wartość przechowywaną w resultpliku , więc po kroku jeszcze jeden wiersz do przodu przy użyciu klawisza F10 zostanie wyświetlone okno konsoli:

    Zrzut ekranu przedstawiający konsolę debugowania programu Visual Studio z wynikiem operacji dzielenia według zera.

    Dane wyjściowe aplikacji: wprowadź operację do wykonania. Format: a+b | a-b | a*b | a/b. Użytkownik wprowadził wartość 5-0. Dane wyjściowe aplikacji: Wynik: 5. Użytkownik THe wprowadził 10/0. Dane wyjściowe aplikacji: Wynik: inf

    Jest to spowodowane tym, że dzielenie według zera jest niezdefiniowane, więc program nie ma liczbowej odpowiedzi dla żądanej operacji.

Naprawiono błąd "podziel przez zero"

Obsłużmy dzielenie przez zero bardziej bezpiecznie, aby ułatwić użytkownikowi zrozumienie problemu.

  1. Wprowadź następujące zmiany w pliku CalculatorTutorial.cpp. (Możesz pozostawić program uruchomiony podczas edycji, dzięki funkcji debugera o nazwie Edytuj i kontynuuj). Zmiana polega na dodaniu instrukcji następującej if w cin >> x >> oper >> y; celu sprawdzenia dzielenia według zera i wyprowadzenia komunikatu do użytkownika, jeśli tak się stanie. W przeciwnym razie wynik zostanie wydrukowany:

    // 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. Naciśnij klawisz F5 raz. Wykonywanie programu jest kontynuowane aż do momentu wstrzymania, aby poprosić o podanie danych wejściowych użytkownika. Wprowadź 10 / 0 ponownie. Teraz zostanie wydrukowany bardziej pomocny komunikat. Użytkownik jest proszony o więcej danych wejściowych, a program kontynuuje normalne wykonywanie.

    Wideo z konsolą debugowania przedstawiającą wynik końcowy po zmianie kodu. Wprowadzono wartość 10/0, a program wyświetla wartość

    Uwaga

    Podczas edytowania kodu w trybie debugowania istnieje ryzyko, że kod staje się nieaktualny. Dzieje się tak, gdy debuger nadal uruchamia stary kod i nie zaktualizował go wraz ze zmianami. Debuger pojawia się okno dialogowe informujące o tym, kiedy tak się stanie. Czasami może być konieczne naciśnięcie klawisza F5 , aby odświeżyć wykonywany kod. W szczególności, jeśli wprowadzisz zmianę wewnątrz funkcji, gdy punkt wykonywania znajduje się wewnątrz tej funkcji, wyjdź z funkcji, a następnie wróć do niej ponownie, aby pobrać zaktualizowany kod. Jeśli to nie zadziała z jakiegoś powodu i zostanie wyświetlony komunikat o błędzie, możesz zatrzymać debugowanie, klikając czerwony kwadrat na pasku narzędzi w menu w górnej części środowiska IDE, a następnie ponownie rozpocznij debugowanie, wprowadzając klawisz F5 lub wybierając zieloną strzałkę "odtwórz" obok przycisku Zatrzymaj na pasku narzędzi.

    Innym powodem, dla którego edytowanie i kontynuowanie może zakończyć się niepowodzeniem, jest to, że należy przejść do menu głównego i wybrać pozycję Narzędzia>Opcje>Debugowanie>ogólne i upewnić się, że zaznaczono opcję Wymagaj plików źródłowych, aby dokładnie dopasować oryginalną wersję.

    Opis skrótów Uruchamiania i debugowania

    • F5 (lub Debuguj>rozpocznij debugowanie debugowania) uruchamia sesję debugowania, jeśli nie jest jeszcze aktywna, i uruchamia program do momentu trafienia punktu przerwania lub program potrzebuje danych wejściowych użytkownika. Jeśli żadne dane wejściowe użytkownika nie są potrzebne i żaden punkt przerwania nie jest dostępny, program zakończy działanie, a okno konsoli zostanie zamknięte po zakończeniu działania programu. Jeśli masz do uruchomienia program "Hello World", użyj klawiszy Ctrl+F5 lub ustaw punkt przerwania przed naciśnięciem klawisza F5 , aby zachować otwarte okno.
    • Ctrl+F5 (lub Debuguj>uruchamianie bez debugowania) uruchamia aplikację bez przechodzenia do trybu debugowania. Jest to nieco szybsze niż debugowanie, a okno konsoli pozostaje otwarte po zakończeniu wykonywania programu.
    • Klawisz F10 (znany jako krok po kroku) umożliwia iterowanie kodu, wiersz po wierszu i wizualizowanie sposobu uruchamiania kodu oraz wartości zmiennych w każdym kroku wykonywania.
    • Klawisz F11 (znany jako Krok do) działa podobnie do krok po kroku, z wyjątkiem kroków w dowolnych funkcjach wywoływanych w wierszu wykonywania. Jeśli na przykład wykonywany wiersz wywołuje funkcję, naciśnięcie klawisza F11 przenosi wskaźnik do treści funkcji, aby można było postępować zgodnie z kodem funkcji uruchamianym przed powrotem do wiersza uruchomionego pod adresem . Naciśnięcie klawisza F10 przez wywołanie funkcji i przejście do następnego wiersza; nadal odbywa się wywołanie funkcji, ale program nie wstrzymuje się, aby pokazać, co robi.

Zamknięcie aplikacji

  • Jeśli nadal działa, zamknij okno konsoli aplikacji kalkulatora.

Gratulacje! Kod aplikacji kalkulatora został ukończony i skompilowany i debugowany w programie Visual Studio.

Następne kroki

Dowiedz się więcej o programie Visual Studio dla języka C++