Delen via


Een consolecalculator maken in C++

Het gebruikelijke beginpunt voor een C++-programmeur is een "Hallo wereld!"-toepassing die wordt uitgevoerd op de opdrachtregel. U begint met dat in dit artikel en gaat vervolgens verder met iets uitdagender: een rekenmachine-app.

Vereiste voorwaarden

  • Visual Studio met het desktopontwikkeling met C++ werkpakket geïnstalleerd en actief op uw computer. Zie C++-ondersteuning installeren in Visual Studio om deze te installeren.
  • In deze zelfstudie ziet u een functie met de naam Bewerken en doorgaan, waarmee u wijzigingen in uw code kunt aanbrengen terwijl de app wordt uitgevoerd. Als u bewerken en doorgaan wilt inschakelen, selecteert u in het hoofdmenu Extra>Opties>Foutopsporing>Algemeen en zorgt u ervoor dat de optie Bronbestanden moeten exact overeenkomen met de oorspronkelijke versie is ingeschakeld.

Uw app-project maken

Visual Studio maakt gebruik van projecten om de code voor een app te organiseren en oplossingen om een of meer projecten te organiseren. Een project bevat alle opties, configuraties en regels die worden gebruikt om een app te bouwen. Het beheert ook de relatie tussen alle bestanden van het project en eventuele externe bestanden. Als u uw app wilt maken, maakt u eerst een nieuw project en een nieuwe oplossing.

  1. Start Visual Studio: het dialoogvenster Start van Visual Studio wordt weergegeven. Selecteer Een nieuw project maken om aan de slag te gaan.

    Schermopname van het dialoogvenster dat wordt weergegeven wanneer Visual Studio 2022 wordt gestart.

    Het dialoogvenster bevat opties voor het klonen van een opslagplaats, het openen van een project of oplossing, het openen van een lokale map en het maken van een nieuw project.

  2. Stel in het dialoogvenster Een nieuw project maken de vervolgkeuzelijst taal in op C++, stel de vervolgkeuzelijst platform in op Windows, selecteer Console-app in de lijst met projecttypen en selecteer vervolgens Volgende.

    Schermopname van het dialoogvenster Een nieuw project maken in Visual Studio.

    De vervolgkeuzelijst taal is ingesteld op C++, de vervolgkeuzelijst op het platform is ingesteld op Windows en projecttypen zoals Leeg project, Console-app, CMake-project, Wizard Windows Desktop, enzovoort, worden weergegeven in de lijst met projecttypen.

    Belangrijk

    Zorg ervoor dat u de C++-versie van de console-app-sjabloon selecteert. Het bevat de tags C++, Windows en Console en het pictogram heeft '++' in de hoek.

  3. Selecteer in het dialoogvenster Uw nieuwe project configureren het tekstvak Projectnaam , geef uw nieuwe project CalculatorTutorial een naam en selecteer vervolgens Maken.

    Schermopname van het dialoogvenster Uw nieuwe project configureren in Visual Studio. Het bevat velden voor projectnaam, projectlocatie en oplossingsnaam.

    Er wordt een lege C++ Windows-consoletoepassing 'Hallo wereld'-app gemaakt. Consoletoepassingen gebruiken een Windows-consolevenster om uitvoer weer te geven en gebruikersinvoer te accepteren. In Visual Studio wordt een editorvenster geopend en wordt de gegenereerde code weergegeven:

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

Controleer of uw nieuwe app wordt gebouwd en uitgevoerd

Met de sjabloon voor een nieuwe Windows-consoletoepassing wordt een eenvoudige C++ 'Hallo wereld'-app gemaakt. Op dit moment kunt u zien hoe Visual Studio de apps bouwt en uitvoert die u rechtstreeks vanuit de IDE maakt.

  1. Als u uw project wilt bouwen, selecteert u Build Solution in het menu Build . In het venster Uitvoer worden de resultaten van het bouwproces weergegeven.

    Schermopname van het visual studio-uitvoervenster. Er wordt een bericht weergegeven dat de build is geslaagd.

  2. Als u de code wilt uitvoeren, selecteert u op de menubalk Debug>Start zonder foutopsporing (Ctrl+F5).

    Schermopname van de Visual Studio Debug Console met de uitvoer van de toepassing: Hallo wereld!

    Er wordt een consolevenster geopend en uw app wordt erin uitgevoerd.

    Wanneer u een console-app start in Visual Studio, wordt uw code uitgevoerd en wordt vervolgens 'Druk op een willekeurige toets om dit venster te sluiten' afgedrukt. . zodat u een kans krijgt om de uitvoer te zien.

    Gefeliciteerd! U hebt uw eerste 'Hallo wereld!'-console-app gemaakt in Visual Studio.

  3. Druk op een toets om het consolevenster te sluiten en terug te keren naar Visual Studio.

U hebt nu de hulpprogramma's om uw app na elke wijziging te bouwen en uit te voeren om te controleren of de code nog steeds werkt zoals verwacht. Later laten we u zien hoe u fouten kunt opsporen als dat niet zo is.

De code bewerken

Laten we nu de code in deze sjabloon aanpassen tot een rekenmachine-app.

  1. Vervang de inhoud van het CalculatorTutorial.cpp bestand door de volgende code, zodat het overeenkomt met dit voorbeeld:

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

    De code begrijpen

    • De #include instructie voegt code uit andere bestanden toe. Soms ziet u mogelijk een bestandsnaam tussen punthaken zoals <iostream>. Met de punthaken wordt de compiler geïnstrueerd om eerst in de standaardsysteemmappen naar het iostream headerbestand te zoeken en zo niet te vinden, om te zoeken in mappen die specifiek zijn voor het project. In andere gevallen ziet u mogelijk een bestandsnaam tussen aanhalingstekens zoals "someHeader.h". Met de aanhalingstekens wordt de compiler geïnstrueerd om het zoeken in de standaardsysteemmappen over te slaan en in plaats daarvan alleen te zoeken in mappen die specifiek zijn voor het project.
    • Hiermee using namespace std; wordt aan de compiler aangegeven dat code uit de standaardbibliotheek van C++ moet worden gebruikt in dit bestand. Zonder deze regel moet elk trefwoord uit de bibliotheek worden voorafgegaan door std:: het bereik aan te geven. Zonder die regel zou elke verwijzing cout bijvoorbeeld worden geschreven als std::cout. De using instructie wordt toegevoegd om het gemakkelijker te maken om toegang te krijgen tot code in een andere naamruimte.
    • Het cout trefwoord wordt gebruikt om af te drukken naar de standaarduitvoer in C++. De << operator instrueert de compiler om alles wat er rechts van staat naar de standaarduitvoer te sturen.
    • Het endl trefwoord is vergelijkbaar met de Enter-toets. Hiermee wordt de regel beëindigd en wordt de cursor naar de volgende regel verplaatst. Het is een betere gewoonte om een \n binnen de tekenreeks (gevat door "") te plaatsen om hetzelfde effect te bereiken, omdat endl altijd de buffer leegmaakt, wat de prestaties van het programma kan schaden. Maar omdat dit een zeer kleine app is, endl wordt in plaats daarvan gebruikt.
    • Alle C++-instructies moeten eindigen met puntkomma's en alle C++-toepassingen moeten een main() functie bevatten. Deze functie is wat het programma aan het begin uitvoert. Om gebruikt te kunnen worden, moet alle code toegankelijk zijn vanuit main().
  2. Als u het bestand wilt opslaan, drukt u op Ctrl+S of selecteert u het diskettepictogram op de werkbalk onder de menubalk.

  3. Als u de toepassing wilt uitvoeren, drukt u op Ctrl+F5 of gaat u naar het menu Foutopsporing en selecteert u Starten zonder foutopsporing. Er wordt nu een consolevenster weergegeven dat er als volgt uitziet.

  4. Sluit het consolevenster wanneer u klaar bent.

Code toevoegen om wat wiskunde uit te voeren

Een klasse lijkt op een blauwdruk voor een object dat iets doet. In dit geval definiëren we een rekenmachineklasse die de wiskundige logica bevat.

Een calculatorklasse toevoegen

  1. Ga naar het menu Project en selecteer Klasse toevoegen. Voer Calculator in het bewerkingsvak Klassenaam in. Kies OK.

    Schermopname van het dialoogvenster Klasse toevoegen in Visual Studio.

    Het veld klassenaam bevat de tekstcalculator. Het h-bestandsveld bevat Calculator.h. Het .cpp bestandsveld bevat Calculator.cpp. Het basisklasseveld is leeg. De opties voor inline en Beheerd zijn uitgeschakeld.

    Er worden twee nieuwe bestanden toegevoegd aan uw project. Als u al uw gewijzigde bestanden tegelijk wilt opslaan, drukt u op Ctrl+Shift+S. Het is een sneltoets voor Alles>opslaan. Er is ook een werkbalkknop voor Alles opslaan, een pictogram van twee diskettes, te vinden naast de knop Opslaan . Over het algemeen is het raadzaam om Alles op te slaan regelmatig uit te voeren, zodat u geen wijzigingen vergeet op te slaan.

    De wizard Klasse toevoegen maakt .h en .cpp bestanden met dezelfde naam als de klasse. U ziet een volledige lijst met uw projectbestanden in het Solution Explorer-venster , zichtbaar aan de zijkant van de IDE. Als het venster niet zichtbaar is, opent u het vanuit de menubalk viaSolution Explorer weergeven>.

    Schermopname van het venster Visual Studio Solution Explorer.

    Het handleidingproject rekenmachine heeft een knooppunt voor headerbestanden dat Calculator.h bevat. Een knooppunt Bronbestanden bevat Calculator.cpp en CalculatorTutorial.cpp. Knooppunten voor verwijzingen, externe afhankelijkheden en resourcebestanden zijn zichtbaar maar gesloten.

    U kunt een bestand openen door erop te dubbelklikken in het venster Solution Explorer . Dubbelklik op Calculator.h om deze te openen.

  2. Vervang de inhoud van Calculator.h door de volgende code, zodat het bestand er nu zo uitziet:

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

    De code begrijpen

    • Deze code declareert een nieuwe functie die wordt aangeroepen Calculate, waarmee wiskundige bewerkingen worden verwerkt voor optellen, aftrekken, vermenigvuldigen en delen.
    • C++-code is ingedeeld in headerbestanden en .hbronbestanden (.cpp). Sommige andere bestandsextensies worden ondersteund door verschillende compilers, maar dit zijn de belangrijkste die u moet weten. Functies en variabelen worden meestal gedeclareerd, dat wil zeggen, van een naam en een type voorzien, in headerbestanden, en geïmplementeerd, dat wil zeggen, van een definitie voorzien, in bronbestanden. Voor toegangscode die in een ander bestand is gedefinieerd, kunt u de #include "filename.h" naam van het bestand gebruiken filename.hdat de variabelen of functies declareert die u wilt gebruiken.
    • Het is raadzaam om uw code in verschillende bestanden te ordenen op basis van wat het doet, zodat u de code die u later nodig hebt, gemakkelijk kunt vinden. In ons geval definiëren we de Calculator klasse afzonderlijk van het bestand met de main() functie, maar we zijn van plan om te verwijzen naar de Calculator klasse in main().
  3. Er wordt een groene golvende lijn weergegeven onder Calculate omdat de Calculate functie wel gedeclareerd is, maar niet gedefinieerd is. Beweeg de muisaanwijzer over Calculate, klik op de pijl-omlaag op het pictogram van de schroevendraaier en selecteer Definitie maken van 'Berekenen' in Calculator.cpp.

    Schermopname van een vervolgkeuzelijst met schroevendraaiers in het venster van de Visual Studio-editor. De optie Definitie maken van Berekenen in Calculator.cpp is gemarkeerd.

    Deze code wordt toegevoegd aan Calculator.cpp:

    Schermopname van de Visual Studio-editor met de definitie van de functie Calculate.

    De definitie van de functie is: double Calculator::Calculate( double x, char oper, double y) { return 0,0; }

    Op dit moment wordt gewoon 0,0 geretourneerd. Laten we die waarde wijzigen.

  4. Schakel over naar het Calculator.cpp bestand in het editorvenster. Vervang de inhoud van Calculator::Calculate(double x, char oper, double y) door:

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

    De code begrijpen

    • De functie Calculate gebruikt een getal, een operator en een tweede getal. Vervolgens wordt de aangevraagde bewerking uitgevoerd op de twee getallen.
    • De switch instructie controleert welke operator is opgegeven en voert het geval uit dat overeenkomt met die bewerking. Het default: geval is een back-up voor het geval dat de gebruiker een operator typt die niet wordt verwerkt door een van de voorgaande case instructies. Het is raadzaam om ongeldige gebruikersinvoer op een elegantere manier af te handelen, maar dit valt buiten het bereik van deze zelfstudie.
    • Het double trefwoord geeft een type getal aan dat decimalen ondersteunt. Dit type getal wordt een drijvendekommagetal genoemd, en double staat voor een drijvendekommagetal dat extra precisie heeft. Op deze manier kan de rekenmachine zowel decimale wiskundige als gehele getallen verwerken. De Calculate functie is vereist om altijd een drijvende kommanummer met dubbele precisie te retourneren vanwege het double begin van de code (dit geeft het retourtype van de functie aan), daarom retourneren we 0,0 in het standaardscenario.
    • Het .h bestand declareert het prototype van de functie, waarmee de compiler vooraf aangeeft welke parameters het nodig heeft en welk retourtype ervan moet worden verwacht. Het .cpp bestand bevat alle implementatiedetails van de functie.

Als u de code op dit moment bouwt en uitvoert, wordt deze onmiddellijk afgesloten nadat u hebt gevraagd welke bewerking moet worden uitgevoerd. Wijzig daarom de main functie om meerdere berekeningen uit te voeren.

De functies van het Calculator klasselid aanroepen

  1. Werk de functie main in CalculatorTutorial.cpp als volgt bij:

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

    De code begrijpen

    • Omdat C++-programma's altijd bij de main() functie beginnen, moeten we onze andere code daar aanroepen, zodat er een #include instructie nodig is om die code zichtbaar te maken voor onze main() functie.
    • De variabelenx, yen operresult worden gedeclareerd om respectievelijk het eerste getal, het tweede getal, de operator en het uiteindelijke resultaat op te slaan. Het is altijd een goede gewoonte om ze een aantal initiële waarden te geven om niet-gedefinieerd gedrag te voorkomen. Dit is wat hier wordt gedaan.
    • De Calculator c; regel declareert een object met de naam c als een exemplaar van de Calculator klasse. De klasse zelf is slechts een blauwdruk voor de werking van rekenmachines; het object is de specifieke rekenmachine die de wiskunde doet.
    • De while (true) statement is een lus. De code in de lus wordt telkens opnieuw uitgevoerd zolang de voorwaarde in de () lus waar is. Omdat de voorwaarde gewoon wordt vermeld als true, is het altijd waar, waardoor de lus oneindig blijft doorgaan. Als u het programma wilt sluiten, moet de gebruiker het consolevenster handmatig sluiten. Anders wacht het programma altijd op nieuwe invoer.
    • Het cin trefwoord accepteert invoer van de gebruiker. De invoerstroom is slim genoeg om een regel tekst te verwerken die is ingevoerd in het consolevenster en deze in elk van de vermelde variabelen in de volgorde te plaatsen.
    • De c.Calculate(x, oper, y); expressie roept de Calculate eerder gedefinieerde functie aan en levert de ingevoerde invoerwaarden en de aangevraagde bewerking. De functie retourneert vervolgens een getal dat is opgeslagen in result.
    • Ten slotte wordt result geprint naar de console en ziet de gebruiker het resultaat van de berekening.

De code opnieuw bouwen en testen

Test het programma nu opnieuw om te controleren of alles goed werkt.

  1. Druk op Ctrl+F5 om de app opnieuw te bouwen en te starten.

  2. Enter 5+5en druk op Enter. Controleer of het resultaat 10 is.

    Schermopname van een opdrachtvenster met de resultaten van het uitvoeren van het programma.

    De app voert het bericht uit: Voer de bewerking in die moet worden uitgevoerd. Opmaak: a+b | a-b | a*b | a/b. De gebruiker heeft 5+5 ingevoerd. De app-uitvoer: Resultaat van 5+5 is: 10

  3. Stop het programma door het consolevenster te sluiten.

Fouten opsporen in de app

Omdat de gebruiker vrij is om iets in het consolevenster te typen, gaan we ervoor zorgen dat de calculator onverwachte invoer verwerkt. In plaats van het programma uit te voeren, gaan we fouten opsporen, zodat we kunnen controleren wat het stapsgewijs doet.

De app uitvoeren in het foutopsporingsprogramma

  1. Stel een breekpunt in in CalcuatorTutorial.cpp op de regel: result = c.Calculate(x, oper, y);. Als u het onderbrekingspunt wilt instellen, klikt u naast de lijn in de grijze verticale balk aan de linkerkant van het editorvenster, zodat er een rode stip wordt weergegeven.

    Schermopname van de Visual Studio-editor. Er wordt een rode stip weergegeven die een onderbrekingspunt aangeeft op de regel: result = c.Calculate(x, oper, y).

    Wanneer we nu fouten in het programma opsporen, wordt de uitvoering op die regel onderbroken. We hebben al een ruw idee dat het programma werkt voor eenvoudige gevallen. Omdat we de uitvoering niet elke keer dat we aanroepen Calculate()willen onderbreken, gaan we het onderbrekingspunt voorwaardelijk maken.

  2. Klik met de rechtermuisknop op de rode stip die het onderbrekingspunt vertegenwoordigt en selecteer Voorwaarden. Voer in het invoervak voor de voorwaarde in (y == 0) && (oper == '/'). Selecteer de knop Sluiten om de onderbrekingspuntvoorwaarde op te slaan.

    Schermopname van een ingesteld onderbrekingspunt

    Het onderbrekingspunt bevindt zich op de regel: result = c dot Calculate (x, oper, y). 'Voorwaarden...' De optie Voorwaarde is ingeschakeld. De vervolgkeuzelijst Voorwaarden is ingesteld op 'Voorwaardelijke expressie'. De vervolgkeuzelijst voorwaarde is ingesteld op 'Is waar'. De voorwaarde is ingesteld op y == 0 && oper == '/'.

    De uitvoering wordt nu onderbroken op het onderbrekingspunt wanneer de app probeert te delen door 0.

  3. Als u fouten in het programma wilt opsporen, drukt u op F5 of selecteert u de werkbalkknop Lokaal Windows Debugger-foutopsporingsprogramma met het groene pijlpictogram. Als u in uw console-app iets als '5 - 0' invoert, gedraagt het programma zich normaal en blijft het actief. Als u echter '10 / 0' typt, wordt deze onderbroken op het onderbrekingspunt. U kunt een willekeurig aantal spaties tussen de operator en getallen plaatsen: cin is slim genoeg om de invoer op de juiste manier te parseren.

    Schermopname van Visual Studio-editor. Uitvoering van het programma is gestopt op het voorwaardelijke onderbrekingspunt op de regel: result = c.Calculate(x, oper, y);.

Nuttige vensters in het foutopsporingsprogramma

Wanneer u fouten in uw code opssport, ziet u mogelijk dat er nieuwe vensters worden weergegeven. Deze vensters kunnen uw foutopsporingservaring helpen. Bekijk het venster Autos . In het venster Autos ziet u de huidige waarden van variabelen die gebruikt zijn vanaf ten minste drie regels voor de huidige regel tot en met de huidige regel. Als u het venster Autos niet ziet, selecteert u in het hoofdmenu Fouten opsporen> inWindows>Auto's.

Schermopname van het Auto's-venster in de Visual Studio-debugger.

De waarde van oper is 47 '/', het resultaat is 5, x is 10 en y is 0.

Als u alle variabelen van die functie wilt zien, schakelt u over naar het venster Locals . Omdat dit een kleine functie is, worden in het venster Auto's en Locals dezelfde variabelen weergegeven. Maar u kunt de waarden van deze variabelen wijzigen in het venster Locals tijdens foutopsporing om te zien welk effect ze op het programma zouden hebben. In dit geval laten we ze alleen. Open het venster Locals door Locals onderaan het venster Autos te selecteren of door te selecteren in het hoofdmenu Fouten opsporen> inWindows>Locals.

Schermopname van het venster Locals in Visual Studio, waarin de huidige waarden van lokale variabelen worden weergegeven tijdens foutopsporing.

De waarde van oper is 47 '/', het resultaat is 0, x is 10 en y is 0.

U kunt ook de muisaanwijzer op variabelen in de code plaatsen om de huidige waarden te zien op het punt waarop de uitvoering momenteel is onderbroken. Controleer of het editorvenster de focus heeft door erop te klikken.

Schermopname van een tooltipextract met de waarde van de variabele 'oper', die 47 of '/' is.

Doorgaan met foutopsporing

  1. De gele pijl aan de linkerkant toont het huidige uitvoeringspunt. De huidige regel roept Calculate aan, dus druk op F11 om in de functie te stappen. Nu voert u code uit in de hoofdtekst van de Calculate functie. Wees voorzichtig met Stap in, omdat u hiermee elke functie op de regel waarin u zich bevindt kunt binnengaan, inclusief functies uit de standaardbibliotheek. Het is prima om in de standaardbibliotheek te gaan, maar misschien wilt u zich meer concentreren op uw code in plaats van bibliotheekcode.

  2. Nu het uitvoeringspunt aan het begin van de Calculate functie staat, drukt u op F10 om naar de volgende regel in de uitvoering van het programma te gaan. F10 wordt ook wel Step Over genoemd. U kunt Step Over gebruiken om van regel naar regel te gaan, zonder de details te bekijken van wat er in elk deel van de regel gebeurt. Over het algemeen moet u Step Over gebruiken in plaats van Step Into , tenzij u dieper wilt ingaan op code die ergens anders wordt aangeroepen (zoals u hebt gedaan om de hoofdtekst van Calculate).

  3. Ga verder met het gebruik van F10 om elke regel te doorlopen totdat u teruggaat naar de main() functie in het andere bestand en stop op de cout regel.

    Het programma doet wat er wordt verwacht: het neemt het eerste getal en deelt het door de tweede. Plaats de muisaanwijzer op de coutresult variabele of kijk result in het venster Autos . De waarde is inf, wat er niet goed uitziet.

    Schermopname van foutopsporing van de calculator.

    De huidige instructie in het foutopsporingsprogramma is cout << "Result is: " << result << endl; Het resultaat is inf in het venster autos.

    Laten we het oplossen. De cout regel voert elke waarde uit waarin wordt opgeslagen result, dus wanneer u één regel vooruit stapt met F10, wordt het consolevenster weergegeven:

    Schermopname van de Visual Studio Debug Console met het resultaat van een deling door nulbewerking.

    De uitvoer van de app: Voer de bewerking in die moet worden uitgevoerd. Opmaak: a+b | a-b | a*b | a/b. De gebruiker heeft 5-0 ingevoerd. De uitvoer van de app: Resultaat is: 5. De gebruiker heeft 10/0 ingevoerd. De uitvoer van de app: resultaat is: inf

    Dit resultaat is omdat delen door nul niet is gedefinieerd, dus het programma heeft geen numeriek antwoord voor de aangevraagde bewerking.

De fout 'delen door nul' oplossen

Laten we delen door nul beter afhandelen, zodat de gebruiker het probleem gemakkelijker kan begrijpen.

  1. Breng de volgende wijzigingen aan in CalculatorTutorial.cpp. U kunt het programma actief laten terwijl u bewerkt, dankzij een functie voor foutopsporingsprogramma's met de naam Bewerken en Doorgaan. Voeg een if instructie toe die volgt cin >> x >> oper >> y; om te controleren op delen door nul en een bericht naar de gebruiker uit te voeren als dit gebeurt. Anders wordt het resultaat afgedrukt.

    // 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. Druk eenmaal op F5 . De uitvoering van het programma wordt voortgezet totdat deze moet worden onderbroken om gebruikersinvoer te vragen. Voer opnieuw in 10 / 0 . Er wordt nu een nuttiger bericht afgedrukt. De gebruiker wordt gevraagd om meer invoer en het programma wordt normaal uitgevoerd.

    Schermopname van een consolevenster met de uiteindelijke uitvoer na het implementeren van wijzigingen voor het verwerken van delen door nul.

    In het consolevenster worden twee regels weergegeven: 10/0 Resultaat is: inf, gevolgd door 10/0 Wiskundige fout: Poging om te delen door nul.

    Opmerking

    Wanneer u code in de foutopsporingsmodus bewerkt, bestaat het risico dat code verouderd raakt. Dit gebeurt wanneer het foutopsporingsprogramma nog steeds uw oude code uitvoert en deze nog niet heeft bijgewerkt met uw wijzigingen. In het foutopsporingsprogramma wordt een dialoogvenster weergegeven waarin u wordt geïnformeerd wanneer dit gebeurt. Soms moet u mogelijk op F5 drukken om de code te vernieuwen die wordt uitgevoerd. Met name als u een wijziging aanbrengt binnen een functie terwijl het uitvoeringspunt zich in die functie bevindt, moet u de functie uitstappen en vervolgens weer in de functie zetten om de bijgewerkte code op te halen. Als dat niet werkt en er een foutbericht wordt weergegeven, kunt u de foutopsporing stoppen door op het rode vierkant in de werkbalk onder de menu's boven aan de IDE te klikken en vervolgens opnieuw foutopsporing te starten door F5 in te voeren of door de groene pijl afspelen naast de stopknop op de werkbalk te kiezen.

    Een andere reden waarom bewerken en doorgaan kan mislukken, is als u een bericht ziet met de tekst "De instelling 'Bronbestanden vereisen om exact overeen te komen met de oorspronkelijke versie' onder Debug->Opties->Algemeen moet zijn ingeschakeld..." Om dit op te lossen, selecteert u in het hoofdmenu Extra>Opties>Debuggen>Algemeen en zorgt u ervoor dat Bronbestanden vereisen om exact overeen te komen met de oorspronkelijke versie is ingeschakeld.

    Inzicht in de snelkoppelingen voor uitvoeren en debuggen

    • F5, of Foutopsporingstarten>, start een foutopsporingssessie, als deze nog niet actief is en voert het programma uit totdat een onderbrekingspunt is bereikt of het programma gebruikersinvoer nodig heeft. Als er geen gebruikersinvoer nodig is en er geen onderbrekingspunt beschikbaar is om te raken, wordt het programma beëindigd en sluit het consolevenster zichzelf wanneer het programma is uitgevoerd. Als uw programma naar de console wordt uitgevoerd, gebruikt u Ctrl+F5 of stelt u een onderbrekingspunt in voordat u op F5 drukt om het venster geopend te houden.
    • Met Ctrl+F5 of Foutopsporing> wordt de toepassing uitgevoerd zonder de foutopsporingsmodus in te gaan. Dit is iets sneller dan foutopsporing en het consolevenster blijft geopend nadat het programma is uitgevoerd.
    • Met F10, ook wel Step Over genoemd, kunt u code, line-by-line doorlopen en visualiseren hoe de code wordt uitgevoerd en welke variabele waarden er zijn bij elke stap van de uitvoering.
    • F11, ook wel Step Into genoemd, werkt op dezelfde manier als Step Over, met uitzondering van functies die worden aangeroepen op de uitvoeringsregel. Als de regel die wordt uitgevoerd bijvoorbeeld een functie aanroept, wordt de aanwijzer door op F11 te drukken naar de hoofdtekst van de functie verplaatst, zodat u de code van de functie kunt volgen die wordt uitgevoerd voordat u teruggaat naar de regel waarop u bent begonnen. Druk op F10 om over de functie-aanroep heen te stappen en naar de volgende regel te gaan; de functieaanroep gebeurt nog steeds, maar het programma stopt niet om te laten zien wat het doet.

De app sluiten

  • Als deze nog steeds wordt uitgevoerd, sluit u het consolevenster om de rekenmachine-app te stoppen.

Git-broncodebeheer toevoegen

Nu u een app hebt gemaakt, kunt u deze toevoegen aan een Git-opslagplaats. Wij zorgen ervoor. Visual Studio maakt dit proces eenvoudig met Git-hulpprogramma's die u rechtstreeks vanuit de IDE kunt gebruiken.

Aanbeveling

Git is het meest gebruikte moderne versiebeheersysteem, dus of u nu een professionele ontwikkelaar bent of leert hoe u codet, Git kan erg nuttig zijn. Als u niet eerder met Git werkt, is de https://git-scm.com/ website een goede plek om te beginnen. Daar vindt u cheatsheets, een populair onlineboek en Git Basics-video's.

Als u uw code wilt koppelen aan Git, begint u met het maken van een nieuwe Git-opslagplaats waar uw code zich bevindt. U doet dit als volgt:

  1. Selecteer In de statusbalk in de rechterbenedenhoek van Visual Studio de optie Toevoegen aan broncodebeheer en selecteert u Vervolgens Git.

    Schermopname van de Knoppen voor Git-broncodebeheer onder het deelvenster Solution Explorer, met de knop Toevoegen aan broncodebeheer gemarkeerd.

  2. Meld u aan bij GitHub in het dialoogvenster Een Git-opslagplaats maken .

    Schermopname van het dialoogvenster Een Git-opslagplaats maken waarin u een nieuwe GitHub-opslagplaats maakt.

    De naam van de opslagplaats wordt automatisch ingevuld op basis van uw maplocatie. Standaard is uw nieuwe opslagplaats privé, wat betekent dat u de enige bent die er toegang toe heeft.

    Aanbeveling

    Of uw opslagplaats nu openbaar of privé is, u kunt het beste een externe back-up van uw code veilig opslaan op GitHub. Zelfs als u niet met een team werkt, maakt een externe opslagplaats uw code beschikbaar vanaf elke computer.

  3. Selecteer maken en pushen.

    Nadat u de opslagplaats hebt gemaakt, worden de statusgegevens weergegeven op de statusbalk.

    Schermopname van de statusbalk van de opslagplaats onder het deelvenster Visual Studio Solution Explorer, met de naam van de vertakking en het aantal openstaande wijzigingen.

    Het eerste pictogram met de pijlen laat zien hoeveel uitgaande/binnenkomende commits er in uw huidige branch zijn. U kunt dit pictogram gebruiken om binnenkomende commits op te halen of uitgaande commits te verzenden. U kunt er ook voor kiezen om deze doorvoeringen eerst weer te geven. Als u dit wilt doen, selecteert u het pictogram en selecteert u Vervolgens Uitgaande/Inkomende items weergeven.

    Het tweede pictogram met het potlood toont het aantal niet-doorgevoerde wijzigingen in uw code. U kunt dit pictogram selecteren om deze wijzigingen weer te geven in het venster Git-wijzigingen.

Zie de documentatie voor Versiebeheer van Visual Studio voor meer informatie over het gebruik van Git met uw app.

De voltooide app

Gefeliciteerd! U hebt de code voor de rekenmachine-app voltooid, deze gebouwd en er fouten in opgespoord en toegevoegd aan een opslagplaats, allemaal in Visual Studio.

Volgende stappen

Meer informatie over Visual Studio voor C++

Het gebruikelijke beginpunt voor een C++-programmeur is een "Hallo wereld!"-toepassing die wordt uitgevoerd op de opdrachtregel. U begint met dat in dit artikel en gaat vervolgens verder met iets uitdagender: een rekenmachine-app.

Vereiste voorwaarden

Uw app-project maken

Visual Studio maakt gebruik van projecten om de code voor een app te organiseren en oplossingen om een of meer projecten te organiseren. Een project bevat alle opties, configuraties en regels die worden gebruikt om een app te bouwen. Het beheert ook de relatie tussen alle bestanden van het project en eventuele externe bestanden. Als u uw app wilt maken, maakt u eerst een nieuw project en een nieuwe oplossing.

  1. Selecteer Bestand>nieuw>project op de menubalk in Visual Studio. Het venster Nieuw project wordt geopend.

  2. Zorg er in de linkerzijbalk voor dat Visual C++ is geselecteerd. Selecteer console-app in het midden.

  3. Geef in het tekstvak Naam onderaan de naam de naam van het nieuwe project CalculatorTutorial en selecteer VERVOLGENS OK.

    Schermopname van het dialoogvenster Nieuw project.

    Aan de linkerkant is Andere talen > Visual C++ geselecteerd. In het midden is het projecttype Console-app geselecteerd. Het tekstvak Naam bevat CalculatorTutorial.

    Er wordt een lege C++ Windows-consoletoepassing 'Hallo wereld'-app gemaakt. Consoletoepassingen gebruiken een Windows-consolevenster om uitvoer weer te geven en gebruikersinvoer te accepteren. In Visual Studio wordt een editorvenster geopend en wordt de gegenereerde code weergegeven:

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

Controleer of uw nieuwe app wordt gebouwd en uitgevoerd

Met de sjabloon voor een nieuwe Windows-consoletoepassing maakt u een eenvoudige C++ 'Hallo wereld'-app. Op dit moment kunt u zien hoe Visual Studio de apps bouwt en uitvoert die u rechtstreeks vanuit de IDE maakt.

  1. Als u uw project wilt bouwen, selecteert u Build Solution in het menu Build . In het venster Uitvoer worden de resultaten van het bouwproces weergegeven.

    Schermopname van het visual Studio-uitvoervenster waarin wordt aangegeven dat de build is geslaagd.

  2. Als u de code wilt uitvoeren, selecteert u op de menubalk Debug, Start zonder foutopsporing (Ctrl+F5).

    Schermopname van de Visual Studio Debug Console met de uitvoer: Hallo wereld!

    Er wordt een consolevenster geopend en uw app wordt erin uitgevoerd.

    Wanneer u een console-app start in Visual Studio, wordt uw code uitgevoerd en vervolgens afgedrukt Press any key to close this window . . . om u de uitvoer te laten zien.

    Gefeliciteerd! U hebt uw eerste 'Hallo wereld!'-console-app gemaakt in Visual Studio.

  3. Druk op een toets om het consolevenster te sluiten en terug te keren naar Visual Studio.

U hebt nu de hulpprogramma's om uw app na elke wijziging te bouwen en uit te voeren om te controleren of de code nog steeds werkt zoals verwacht. Later laten we u zien hoe u fouten kunt opsporen als dat niet zo is.

De code bewerken

Nu gaan we de code in deze sjabloon omzetten in een rekenmachine-app.

  1. Vervang de inhoud van het CalculatorTutorial.cpp bestand door de volgende code, zodat het overeenkomt met dit voorbeeld:

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

    De code begrijpen

    • De #include instructie voegt code uit andere bestanden toe. Soms ziet u mogelijk een bestandsnaam tussen punthaken zoals <iostream>. Met de punthaken wordt de compiler geïnstrueerd om eerst in de standaardsysteemmappen naar het iostream headerbestand te zoeken en zo niet te vinden, om te zoeken in mappen die specifiek zijn voor het project. In andere gevallen ziet u mogelijk een bestandsnaam tussen aanhalingstekens zoals "someHeader.h". Met de aanhalingstekens wordt de compiler geïnstrueerd om het zoeken in de standaardsysteemmappen over te slaan en in plaats daarvan alleen te zoeken in mappen die specifiek zijn voor het project.
    • Hiermee using namespace std; wordt aan de compiler aangegeven dat code uit de standaardbibliotheek van C++ moet worden gebruikt in dit bestand. Zonder deze regel moet elk trefwoord uit de bibliotheek worden voorafgegaan door std:: het bereik aan te geven. Zonder die regel zou elke verwijzing cout bijvoorbeeld worden geschreven als std::cout. De using instructie wordt toegevoegd om het gemakkelijker te maken om toegang te krijgen tot code in een andere naamruimte.
    • Het cout trefwoord wordt gebruikt om naar standaarduitvoer in C++ te printen. De << operator instrueert de compiler om alles wat er rechts van staat naar de standaarduitvoer te sturen.
    • Het endl trefwoord is vergelijkbaar met de Enter-toets. Hiermee wordt de regel beëindigd en wordt de cursor naar de volgende regel verplaatst. Het is een betere gewoonte om een \n in de tekenreeks (ingesloten door "") te plaatsen om hetzelfde te doen, omdat endl altijd de buffer leegt en de prestaties van het programma kan beïnvloeden. Maar omdat dit een zeer kleine app is, endl wordt in plaats daarvan gebruikt.
    • Alle C++-instructies moeten eindigen met puntkomma's en alle C++-toepassingen moeten een main() functie bevatten. Deze functie is wat het programma aan het begin uitvoert. Om gebruikt te kunnen worden, moet alle code toegankelijk zijn vanuit main().
  2. Als u het bestand wilt opslaan, drukt u op Ctrl+S of selecteert u het diskettepictogram op de werkbalk onder de menubalk.

  3. Als u de toepassing wilt uitvoeren, drukt u op Ctrl+F5 of gaat u naar het menu Foutopsporing en selecteert u Starten zonder foutopsporing. Als u een pop-upvenster krijgt met de melding Dat dit project verouderd is, kunt u dit dialoogvenster niet opnieuw weergeven en vervolgens Ja selecteren om uw toepassing te bouwen. Er wordt nu een consolevenster weergegeven dat er als volgt uitziet:

    Schermopname van de rekenmachine-app die wordt uitgevoerd in een consolevenster.

    De console-app toont de uitvoer: Calculator Console Application. Voer de bewerking in die moet worden uitgevoerd. Opmaak: a+b | a-b | a*b | a/b. Het proces is beëindigd met code 0 en er is een bericht dat om de console automatisch te sluiten wanneer foutopsporing stopt, u Extra > Opties > Foutopsporing > De console automatisch sluiten wanneer foutopsporing stopt moet inschakelen. Ten slotte is er een bericht om op een willekeurige toets te drukken om dit venster te sluiten.

  4. Sluit het consolevenster wanneer u klaar bent.

Code toevoegen om wat wiskunde uit te voeren

Een klasse lijkt op een blauwdruk voor een object dat iets doet. In dit geval definiëren we een rekenmachineklasse die de wiskundige logica bevat.

Een calculatorklasse toevoegen

  1. Ga naar het menu Project en selecteer Klasse toevoegen. Voer Calculator in het bewerkingsvak Klassenaam in. Kies OK.

    Schermopname van het dialoogvenster Klasse toevoegen in Visual Studio.

    Het veld klassenaam bevat de tekstcalculator. Het h-bestandsveld bevat Calculator.h. Het .cpp bestandsveld bevat Calculator.cpp. Het basisklasseveld is leeg. De opties voor inline en Beheerd zijn uitgeschakeld.

    Een klasse lijkt op een blauwdruk voor een object dat iets doet. In dit geval definiëren we een rekenmachine en hoe deze moet werken.

    Er worden twee nieuwe bestanden toegevoegd aan uw project. Als u al uw gewijzigde bestanden tegelijk wilt opslaan, drukt u op Ctrl+Shift+S. Het is een sneltoets voor Alles>opslaan. Er is ook een werkbalkknop voor Alles opslaan, een pictogram van twee diskettes, te vinden naast de knop Opslaan . Over het algemeen is het raadzaam om Alles regelmatig opslaan uit te voeren, zodat u geen bestanden mist wanneer u opslaat.

    De wizard Klasse toevoegen maakt .h en .cpp bestanden met dezelfde naam als de klasse. U ziet een volledige lijst met uw projectbestanden in het Solution Explorer-venster , zichtbaar aan de zijkant van de IDE. Als Solution Explorer niet zichtbaar is, opent u deze in de menubalk: selecteerSolution Explorer weergeven>.

    Schermopname van het venster Visual Studio Solution Explorer.

    Het zelfstudieproject rekenmachine heeft een knooppunt met header bestanden: Calculator.h, stdafx.h en targetver.h. Een knooppunt Bronbestanden bevat Calculator.cpp, CalculatorTutorial.cpp en stdafx.cpp. Knooppunten voor verwijzingen, externe afhankelijkheden en resourcebestanden zijn zichtbaar maar gesloten.

    U kunt een bestand openen door erop te dubbelklikken in het venster Solution Explorer . Dubbelklik op Calculator.h om deze te openen.

  2. Vervang de inhoud van Calculator.h door de volgende code, zodat het bestand er nu zo uitziet:

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

    De code begrijpen

    • Deze code declareert een nieuwe functie die wordt aangeroepen Calculate, waarmee wiskundige bewerkingen worden verwerkt voor optellen, aftrekken, vermenigvuldigen en delen.
    • C++-code is ingedeeld in headerbestanden en .hbronbestanden (.cpp). Sommige andere bestandsextensies worden ondersteund door verschillende compilers, maar dit zijn de belangrijkste die u moet weten. Functies en variabelen worden meestal gedeclareerd, dat wil zeggen, van een naam en een type voorzien, in headerbestanden, en geïmplementeerd, dat wil zeggen, van een definitie voorzien, in bronbestanden. Voor toegangscode die in een ander bestand is gedefinieerd, kunt u de #include "filename.h" naam van het bestand gebruiken filename.hdat de variabelen of functies declareert die u wilt gebruiken.
    • Het is raadzaam om uw code in verschillende bestanden te ordenen op basis van wat het doet, zodat u de code die u later nodig hebt, gemakkelijk kunt vinden. In ons geval definiëren we de Calculator klasse afzonderlijk van het bestand met de main() functie, maar we zijn van plan om te verwijzen naar de Calculator klasse in main().
  3. Er wordt een groene golvende lijn weergegeven onder Calculate omdat de Calculate functie wel gedeclareerd is, maar niet gedefinieerd is. Beweeg de muisaanwijzer over Calculate, klik op de pijl-omlaag op de gloeilamp en selecteer Definitie 'Berekenen' maken in Calculator.cpp. Er verschijnt een pop-upvenster met een korte weergave van de codewijziging die in het andere bestand is aangebracht. De code is toegevoegd aan Calculator.cpp.

    Video waarin het gebruik van de vervolgkeuzelijst gloeilamp wordt weergegeven om definitie maken van Calculate te selecteren in Calculator.cpp.

    Op dit moment wordt gewoon 0,0 geretourneerd. Laten we die waarde wijzigen. Druk op Esc om het pop-upvenster te sluiten en kies Ja om de wijzigingen op te slaan.

  4. Schakel over naar het Calculator.cpp bestand in het editorvenster. Vervang de inhoud van het bestand door de volgende code:

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

    De code begrijpen

    • De functie Calculate gebruikt een getal, een operator en een tweede getal. Vervolgens wordt de aangevraagde bewerking uitgevoerd op de twee getallen.
    • De switch instructie controleert welke operator is opgegeven en voert het geval uit dat overeenkomt met die bewerking. Het default: geval is een back-up voor het geval dat de gebruiker een operator typt die niet wordt verwerkt door een van de voorgaande case instructies. Het is raadzaam om ongeldige gebruikersinvoer op een elegantere manier af te handelen, maar dit valt buiten het bereik van deze zelfstudie.
    • Het double trefwoord geeft een type getal aan dat decimalen ondersteunt. Dit type getal wordt een drijvendekommagetal genoemd, en double staat voor een drijvendekommagetal dat extra precisie heeft. Op deze manier kan de rekenmachine zowel decimale wiskundige als gehele getallen verwerken. De Calculate functie is vereist om altijd een drijvende kommanummer met dubbele precisie te retourneren vanwege het double begin van de code (dit geeft het retourtype van de functie aan), daarom retourneren we 0,0 in het standaardscenario.
    • Het .h bestand declareert het prototype van de functie, waarmee de compiler vooraf aangeeft welke parameters het nodig heeft en welk retourtype ervan moet worden verwacht. Het .cpp bestand bevat alle implementatiedetails van de functie.

Als u de code op dit moment bouwt en uitvoert, wordt de code nog steeds afgesloten nadat u hebt gevraagd welke bewerking moet worden uitgevoerd. Wijzig vervolgens de main functie om enkele berekeningen uit te voeren.

De functies van het klasselid van de rekenmachine aanroepen

  1. Werk de functie main in CalculatorTutorial.cpp als volgt bij:

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

    De code begrijpen

    • Omdat C++-programma's altijd bij de main() functie beginnen, moeten we onze andere code daar aanroepen, zodat er een #include instructie nodig is om die code zichtbaar te maken voor onze main() functie.
    • De variabelenx, yen operresult worden gedeclareerd om respectievelijk het eerste getal, het tweede getal, de operator en het uiteindelijke resultaat op te slaan. Het is altijd een goede gewoonte om ze een aantal initiële waarden te geven om niet-gedefinieerd gedrag te voorkomen. Dit is wat hier wordt gedaan.
    • De Calculator c; regel declareert een object met de naam c als een exemplaar van de Calculator klasse. De klasse zelf is slechts een blauwdruk voor de werking van rekenmachines; het object is de specifieke rekenmachine die de wiskunde doet.
    • De while (true) statement is een lus. De code in de lus wordt telkens opnieuw uitgevoerd zolang de voorwaarde in de () lus waar is. Omdat de voorwaarde gewoon wordt vermeld als true, is het altijd waar, waardoor de lus oneindig blijft doorgaan. Als u het programma wilt sluiten, moet de gebruiker het consolevenster handmatig sluiten. Anders wacht het programma altijd op nieuwe invoer.
    • Het cin trefwoord accepteert invoer van de gebruiker. De invoerstroom is slim genoeg om een regel tekst te verwerken die is ingevoerd in het consolevenster en deze in elk van de vermelde variabelen in de volgorde te plaatsen.
    • De c.Calculate(x, oper, y); expressie roept de Calculate eerder gedefinieerde functie aan en levert de ingevoerde invoerwaarden en de aangevraagde bewerking. De functie retourneert vervolgens een getal dat is opgeslagen in result.
    • Ten slotte wordt result geprint naar de console en ziet de gebruiker het resultaat van de berekening.

De code opnieuw bouwen en testen

Test het programma opnieuw om te controleren of alles goed werkt.

  1. Druk op Ctrl+F5 om de app opnieuw te bouwen en te starten.

  2. Enter 5+5en druk op Enter. Controleer of het resultaat 10 is.

    Schermopname van een opdrachtvenster met de rekenmachine-app. Het resultaat van 5 + 5 is 10.

  3. Stop het programma door het consolevenster te sluiten.

Fouten opsporen in de app

Omdat de gebruiker vrij is om iets in het consolevenster te typen, gaan we ervoor zorgen dat de calculator onverwachte invoer verwerkt. In plaats van het programma uit te voeren, gaan we in plaats daarvan fouten opsporen, zodat we kunnen controleren wat het stapsgewijs doet.

De app uitvoeren in het foutopsporingsprogramma

  1. Stel CalcuatorTutorial.cppeen onderbrekingspunt in op de result = c.Calculate(x, oper, y); regel. Als u het onderbrekingspunt wilt instellen, klikt u naast de lijn in de grijze verticale balk aan de linkerkant van het editorvenster, zodat er een rode stip wordt weergegeven.

    Schermopname van het instellen van een onderbrekingspunt op regel 23: result = c.Calculate(x, oper, y);.

    Wanneer u nu het programma debugt, pauzeert de executie steeds op die regel. We hebben al een ruw idee dat het programma werkt voor eenvoudige gevallen. Omdat we de uitvoering niet elke keer willen onderbreken, gaan we het onderbrekingspunt voorwaardelijk maken.

  2. Klik met de rechtermuisknop op de rode stip die het onderbrekingspunt vertegenwoordigt en selecteer Voorwaarden. Voer in het invoervak voor de voorwaarde in (y == 0) && (oper == '/'). Selecteer de knop Sluiten wanneer u klaar bent om de onderbrekingspuntvoorwaarde op te slaan.

    Schermopname van het venster met het voorwaardelijke onderbrekingspunt.

    Het onderbrekingspunt bevindt zich op de regel: result = c dot Calculate (x, oper, y). 'Voorwaarden...' De optie Voorwaarde is ingeschakeld. De vervolgkeuzelijst Voorwaarden is ingesteld op 'Voorwaardelijke expressie'. De vervolgkeuzelijst voorwaarde is ingesteld op 'Is waar'. De voorwaarde is ingesteld op y == 0 && oper == '/'.

    De uitvoering wordt onderbroken op het onderbrekingspunt als een splitsing door 0 wordt geprobeerd.

  3. Als u fouten in het programma wilt opsporen, drukt u op F5 of selecteert u de werkbalkknop Lokaal Windows Debugger met het groene pijlpictogram. Als u in uw console-app iets als '5 - 0' invoert, gedraagt het programma zich normaal en blijft het actief. Als u echter '10 / 0' typt, wordt deze onderbroken op het onderbrekingspunt. U kunt zelfs een willekeurig aantal spaties tussen de operator en getallen plaatsen; cin is slim genoeg om de invoer correct te parseren.

    Video waarin de uitvoering van het programma is onderbroken op het voorwaardelijke onderbrekingspunt.

    De gebruiker voert 5 - 0 in. De uitvoer van de app is: Het resultaat is 5. De gebruiker voert vervolgens 10/0 in en omdat aan de voorwaarde voor het voorwaardelijke onderbrekingspunt wordt voldaan, stopt de uitvoering op de regel: result = c.Calculate(x, oper, y);

Nuttige vensters in het foutopsporingsprogramma

Wanneer u fouten in uw code opssport, ziet u mogelijk dat er nieuwe vensters worden weergegeven. Deze vensters kunnen uw foutopsporingservaring helpen. Bekijk het venster Autos . In het venster Autos ziet u de huidige waarden van variabelen die gebruikt zijn vanaf ten minste drie regels voor de huidige regel tot en met de huidige regel. Als u het venster Autos niet ziet, selecteert u in het hoofdmenu Fouten opsporen> inWindows>Auto's.

Schermopname van het Auto's-venster in de Visual Studio-debugger.

De waarde van oper is 47 '/', het resultaat is 5, x is 10 en y is 0.

Als u alle variabelen van die functie wilt zien, schakelt u over naar het venster Locals . Omdat dit een kleine functie is, worden in het venster Auto's en Locals dezelfde variabelen weergegeven. Maar u kunt de waarden van deze variabelen wijzigen tijdens foutopsporing om te zien welk effect ze op het programma zouden hebben. In dit geval laten we ze alleen. Open het venster Locals door Locals onderaan het venster Autos te selecteren of door te selecteren in het hoofdmenu Fouten opsporen> inWindows>Locals.

Schermopname van het venster Locals in Visual Studio, waarin de huidige waarden van lokale variabelen worden weergegeven tijdens foutopsporing.

De waarde van oper is 47 '/', het resultaat is 0, x is 10 en y is 0.

U kunt ook de muisaanwijzer op variabelen in de code zelf plaatsen om de huidige waarden te zien waar de uitvoering momenteel is onderbroken. Controleer of het editorvenster de focus heeft door erop te klikken.

Video waarin een tooltip wordt gedemonstreerd die verschijnt terwijl u de muisaanwijzer boven de variabele y houdt. De huidige waarde van y, 0, wordt weergegeven.

Doorgaan met foutopsporing

  1. De gele pijl aan de linkerkant toont het huidige uitvoeringspunt. De huidige regel roept Calculate aan, dus druk op F11 om in de functie te Stappen, waarmee u naar de hoofdtekst van de Calculate functie gaat. Wees voorzichtig met Stap in, omdat u hiermee elke functie op de regel waarin u zich bevindt kunt binnengaan, inclusief functies uit de standaardbibliotheek. Het is prima om in de standaardbibliotheek te gaan, maar misschien wilt u zich meer concentreren op uw code in plaats van bibliotheekcode.

  2. Nu het uitvoeringspunt aan het begin van de Calculate functie staat, drukt u op F10 om naar de volgende regel in de uitvoering van het programma te gaan. F10 wordt ook wel Step Over genoemd. U kunt Step Over gebruiken om van regel naar regel te gaan, zonder de details te bekijken van wat er in elk deel van de regel gebeurt. Over het algemeen moet u Step Over gebruiken in plaats van Step Into, tenzij u dieper wilt ingaan op code die elders wordt aangeroepen (zoals u hebt gedaan om de hoofdtekst van Calculate).

  3. Ga verder met het gebruik van F10 om elke regel te doorlopen totdat u teruggaat naar de main() functie in het andere bestand en stop op de cout regel.

    Het programma doet wat er wordt verwacht: het neemt het eerste getal en deelt het door de tweede. Plaats de muisaanwijzer op de coutresult variabele of kijk result in het venster Autos . De waarde is inf, wat er niet goed uitziet.

    Schermopname van foutopsporing van de calculator.

    De huidige instructie in het foutopsporingsprogramma is cout << "Result is: " << result << endl; Het resultaat is inf in het venster autos.

    Laten we het oplossen. De cout regel voert elke waarde uit waarin wordt opgeslagen result, dus wanneer u één regel vooruit stapt met F10, wordt het consolevenster weergegeven:

    Schermopname van de Visual Studio Debug Console met het resultaat van een deling door nulbewerking.

    De uitvoer van de app: Voer de bewerking in die moet worden uitgevoerd. Opmaak: a+b | a-b | a*b | a/b. De gebruiker heeft 5-0 ingevoerd. De uitvoer van de app: Resultaat is: 5. De gebruiker heeft 10/0 ingevoerd. De uitvoer van de app: resultaat is: inf

    Dit resultaat is omdat delen door nul niet is gedefinieerd, dus het programma heeft geen numeriek antwoord voor de aangevraagde bewerking.

De fout 'delen door nul' oplossen

Laten we delen door nul beter afhandelen, zodat de gebruiker het probleem gemakkelijker kan begrijpen.

  1. Breng de volgende wijzigingen aan in CalculatorTutorial.cpp. (U kunt het programma actief laten terwijl u bewerkt, dankzij een foutopsporingsprogramma met de naam Bewerken en Doorgaan). De wijziging is het toevoegen van een if instructie die cin >> x >> oper >> y; volgt om te controleren op delen door nul en een bericht aan de gebruiker weer te geven als dit gebeurt. Anders wordt het resultaat afgedrukt:

    // 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. Druk eenmaal op F5 . De uitvoering van het programma wordt voortgezet totdat deze moet worden onderbroken om gebruikersinvoer te vragen. Voer opnieuw in 10 / 0 . Er wordt nu een nuttiger bericht afgedrukt. De gebruiker wordt gevraagd om meer invoer en het programma wordt normaal uitgevoerd.

    Video van de Foutopsporingsconsole met het uiteindelijke resultaat na codewijzigingen. 10 /0 wordt ingevoerd en het programma geeft 'Division by 0 exception' weer.

    Opmerking

    Wanneer u code in de foutopsporingsmodus bewerkt, bestaat het risico dat code verouderd raakt. Dit gebeurt wanneer het foutopsporingsprogramma nog steeds uw oude code uitvoert en deze nog niet heeft bijgewerkt met uw wijzigingen. Het foutopsporingsprogramma toont een dialoogvenster om u te informeren wanneer dit gebeurt. Soms moet u mogelijk op F5 drukken om de code te vernieuwen die wordt uitgevoerd. Met name als u een wijziging aanbrengt in een functie terwijl het uitvoeringspunt zich in die functie bevindt, stapt u uit de functie en gaat u er vervolgens weer naartoe om de bijgewerkte code op te halen. Als dat om een of andere reden niet werkt en u een foutbericht ziet, kunt u de foutopsporing stoppen door op het rode vierkant in de werkbalk onder de menu's boven aan de IDE te klikken en vervolgens opnieuw fouten op te sporen door F5 in te voeren of door de groene pijl afspelen naast de stopknop op de werkbalk te kiezen.

    Een andere reden waarom bewerken en doorgaan kan mislukken, is dat u naar het hoofdmenu moet gaan en Extra>Opties>Debuggen>Algemeen moet selecteren en ervoor moet zorgen dat bronbestanden exact overeenkomen met de oorspronkelijke versie is ingeschakeld.

    Inzicht in de snelkoppelingen voor uitvoeren en debuggen

    • F5, of Foutopsporingstarten>, start een foutopsporingssessie, als deze nog niet actief is en voert het programma uit totdat een onderbrekingspunt is bereikt of het programma gebruikersinvoer nodig heeft. Als er geen gebruikersinvoer nodig is en er geen onderbrekingspunt beschikbaar is om te raken, wordt het programma beëindigd en sluit het consolevenster zichzelf wanneer het programma is uitgevoerd. Als uw programma naar de console wordt uitgevoerd, gebruikt u Ctrl+F5 of stelt u een onderbrekingspunt in voordat u op F5 drukt om het venster geopend te houden.
    • Met Ctrl+F5 of Foutopsporing> wordt de toepassing uitgevoerd zonder de foutopsporingsmodus in te gaan. Dit is iets sneller dan foutopsporing en het consolevenster blijft geopend nadat het programma is uitgevoerd.
    • Met F10, ook wel Step Over genoemd, kunt u code, line-by-line doorlopen en visualiseren hoe de code wordt uitgevoerd en welke variabele waarden er zijn bij elke stap van de uitvoering.
    • F11, ook wel Step Into genoemd, werkt op dezelfde manier als Step Over, met uitzondering van functies die worden aangeroepen op de uitvoeringsregel. Als de regel die wordt uitgevoerd bijvoorbeeld een functie aanroept, wordt de aanwijzer door op F11 te drukken naar de hoofdtekst van de functie verplaatst, zodat u de code van de functie kunt volgen die wordt uitgevoerd voordat u teruggaat naar de regel waarop u bent begonnen. Druk op F10 om over de functie-aanroep heen te stappen en naar de volgende regel te gaan; de functieaanroep gebeurt nog steeds, maar het programma stopt niet om te laten zien wat het doet.

De app sluiten

  • Als deze nog steeds wordt uitgevoerd, sluit u het consolevenster om de rekenmachine-app te stoppen.

De voltooide app

Gefeliciteerd! U hebt de code voor de rekenmachine-app voltooid en deze gemaakt en er fouten in opgespoord in Visual Studio.

Volgende stappen

Meer informatie over Visual Studio voor C++