Dela via


Skapa en konsolkalkylator i C++

Den vanliga startpunkten för en C++-programmerare är ett "Hello, world!"-program som körs på kommandoraden. Du börjar med det i den här artikeln och går sedan vidare till något mer utmanande: en kalkylatorapp.

Förutsättningar

  • Visual Studio med Skrivbordsutveckling med C++ arbetsuppgift installerad och körs på din dator. Information om hur du installerar det finns i Installera C++-stöd i Visual Studio.
  • Den här självstudien visar en funktion som kallas "edit and continue"-funktionen som gör att du kan göra ändringar i koden medan appen körs. Om du vill aktivera redigering och fortsätta väljer du Verktygsalternativ>>Felsökning>Allmänt på huvudmenyn och ser till att Kräv källfiler för att exakt matcha den ursprungliga versionen är markerat.

Skapa ditt appprojekt

Visual Studio använder projekt för att organisera koden för en app och lösningar för att organisera ett eller flera projekt. Ett projekt innehåller alla alternativ, konfigurationer och regler som används för att skapa en app. Den hanterar också relationen mellan alla projektets filer och eventuella externa filer. Skapa din app genom att först skapa ett nytt projekt och en ny lösning.

  1. Starta Visual Studio – dialogrutan Start i Visual Studio visas. Välj Skapa ett nytt projekt för att komma igång.

    Skärmbild av dialogrutan som visas när Visual Studio 2022 startar.

    Dialogrutan har alternativ för att klona en lagringsplats, öppna ett projekt eller en lösning, öppna en lokal mapp och skapa ett nytt projekt."

  2. I dialogrutan Skapa ett nytt projekt anger du språklistrutan till C++, anger plattformslistrutan till Windows, väljer Konsolapp i listan över projekttyper och väljer sedan Nästa.

    Skärmbild av dialogrutan Skapa ett nytt projekt i Visual Studio.

    Listrutan för språk är inställd på C++, plattformslistrutan är inställd på Windows och projekttyper som Tomt projekt, Konsolapp, CMake-projekt, Windows Desktop-guiden och så vidare, visas i listan över projekttyper."

    Viktigt!

    Kontrollera att du väljer C++-versionen av mallen Konsolapp . Den har taggarna C++, Windows och Konsol och ikonen har "++" i hörnet.

  3. I dialogrutan Konfigurera det nya projektet väljer du textrutan Projektnamn , ger det nya projektet namnet CalculatorTutorial och väljer sedan Skapa.

    Skärmbild av dialogrutan Konfigurera det nya projektet i Visual Studio. Den har fält för projektnamn, projektplats och Lösningsnamn.

    En tom "Hello World"-konsolapplikation för C++ i Windows har skapats. Konsolprogram använder ett Windows-konsolfönster för att visa utdata och acceptera användarindata. I Visual Studio öppnas ett redigeringsfönster och visar den genererade koden:

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

Kontrollera att din nya app bygger och körs

Mallen för ett nytt Windows-konsolprogram skapar en enkel C++ "Hello World"-app. Nu kan du se hur Visual Studio skapar och kör de appar som du skapar direkt från IDE:t.

  1. Om du vill skapa projektet väljer du Skapa lösning på menyn Skapa . Fönstret Utdata visar resultatet av byggprocessen.

    Skärmbild av Visual Studio Output-fönstret. Det visar ett meddelande om att kompileringen lyckades.

  2. Om du vill köra koden går du till menyraden och väljer Felsöka>Start utan att felsöka (Ctrl+F5).

    Skärmbild av Visual Studio-felsökningskonsolen som visar utdata från programmet: Hello World!

    Ett konsolfönster öppnas och appen körs i den.

    När du startar en konsolapp i Visual Studio kör den koden och skriver sedan ut "Tryck på valfri tangent för att stänga det här fönstret . . " för att ge dig en chans att se utdata.

    Grattis! Du skapade din första konsolapp "Hello, world!" i Visual Studio!

  3. Tryck på en tangent för att stänga konsolfönstret och återgå till Visual Studio.

Nu har du verktygen för att skapa och köra din app efter varje ändring för att kontrollera att koden fortfarande fungerar som förväntat. Senare visar vi hur du felsöker det om det inte fungerar.

Redigera koden

Nu ska vi ändra koden i den här mallen så att den blir en kalkylatorapp.

  1. Ersätt innehållet i CalculatorTutorial.cpp filen med följande kod så att den matchar det här exemplet:

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

    Förstå koden:

    • Satsen #include importerar kod från andra filer. Ibland kan du se ett filnamn omgivet av vinkelparenteser som <iostream>. Vinkelparenteserna instruerar kompilatorn att leta efter huvudfilen först i standardsystemkatalogerna, och om den inte hittas ska den titta i kataloger som är specifika för iostream projektet. Andra gånger kan du se ett filnamn omgivet av citattecken som "someHeader.h". Citattecken instruerar kompilatorn att hoppa över att titta i standardsystemkatalogerna och i stället bara titta i kataloger som är specifika för projektet.
    • using namespace std; Instruerar kompilatorn att förvänta sig att kod från C++-standardbiblioteket ska användas i den här filen. Utan den här raden måste varje nyckelord från biblioteket föregås av std:: för att ange dess omfång. Utan den raden skrivs till exempel varje referens till cout som std::cout. -instruktionen using läggs till för att göra det enklare att komma åt kod i ett annat namnområde.
    • Nyckelordet cout används för att skriva ut till standardutdata i C++. Operatorn << uppmanar kompilatorn att skicka det som är till höger om den till standardutdata.
    • Nyckelordet endl är som returnyckeln. Det avslutar raden och flyttar markören till nästa rad. Det är en bättre metod att placera en \n inuti strängen (som finns i "") för att göra samma sak eftersom endl alltid tömer bufferten som kan skada programmets prestanda. Men eftersom det här är en mycket liten app endl används den i stället.
    • Alla C++-instruktioner måste sluta med semikolon och alla C++-program måste innehålla en main() funktion. Den här funktionen är vad programmet kör i början. All kod måste vara tillgänglig från main() för att kunna användas.
  2. Spara filen genom att trycka på Ctrl+S eller välja diskettikonen i verktygsfältet under menyraden.

  3. Om du vill köra programmet trycker du på Ctrl+F5 eller går till felsökningsmenyn och väljer Starta utan felsökning. Du bör se ett konsolfönster som ser ut så här.

  4. Stäng konsolfönstret när du är klar.

Lägg till kod för att göra lite matematik

En klass är som en skiss för ett objekt som gör något. I det här fallet definierar vi en kalkylatorklass som ska innehålla matematiklogik.

Lägga till en kalkylatorklass

  1. Gå till menyn Projekt och välj Lägg till klass. I redigeringsrutan Klassnamn anger du Kalkylator. Välj OK.

    Skärmbild av dialogrutan Lägg till klass i Visual Studio.

    Fältet klassnamn innehåller textkalkylatorn. Filfältet .h innehåller Calculator.h. Filfältet .cpp innehåller Calculator.cpp. Basklassfältet är tomt. Alternativen för infogade och hanterade är avmarkerade.

    Två nya filer läggs till i projektet. Om du vill spara alla dina ändrade filer samtidigt trycker du på Ctrl+Skift+S. Det är ett kortkommando för Fil>. Det finns också en verktygsfältsknapp för Spara alla, en ikon på två diskettdiskar, som finns bredvid knappen Spara . I allmänhet är det bra att göra Spara alla ofta, så att du inte missar att spara några ändringar.

    Guiden Lägg till klass skapar .h och .cpp filer som har samma namn som klassen. Du kan se en fullständig lista över dina projektfiler i Solution Explorer-fönstret , som visas på sidan av IDE. Om fönstret inte visas öppnar du det från menyraden via Visa>Solution Explorer.

    Skärmbild av fönstret Visual Studio Solution Explorer.

    Självstudieprojektet för kalkylatorn har en nod för huvudfiler som innehåller Calculator.h. En nod för källfiler innehåller Calculator.cpp och CalculatorTutorial.cpp. Noder för referenser, externa beroenden och resursfiler är synliga men stängda.

    Du kan öppna en fil genom att dubbelklicka på den i Solution Explorer-fönstret . Dubbelklicka på Calculator.h för att öppna den.

  2. Ersätt innehållet i Calculator.h med följande kod så att filen nu ser ut så här:

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

    Förstå koden

    • Den här koden deklarerar en ny funktion med namnet Calculate, som hanterar matematiska åtgärder för addition, subtraktion, multiplikation och division.
    • C++-kod ordnas i huvudfiler (.h) och källfiler (.cpp). Vissa andra filnamnstillägg stöds av olika kompilatorer, men dessa är de viktigaste filnamnstilläggen att känna till. Funktioner och variabler deklareras normalt, d.v.s. med ett namn och en typ, i huvudfiler och implementeras, eller ges en definition, i källfiler. Om du vill komma åt kod som definierats i en annan fil kan du använda #include "filename.h", där filename.h är namnet på filen som deklarerar de variabler eller funktioner som du vill använda.
    • Det är bra att organisera koden i olika filer baserat på vad den gör, så det är enkelt att hitta den kod du behöver senare. I vårt fall definierar Calculator vi klassen separat från filen som innehåller main() funktionen, men vi planerar att referera Calculator till klassen i main().
  3. En grön squiggle visas under Calculate eftersom även Calculate om funktionen hardeklarerats är den inte definierad. Hovra över Calculate, klicka på nedåtpilen på skruvmejselikonen och välj Skapa definition av "Beräkna" i Calculator.cpp.

    Skärmbild av en listruta för skruvmejsel i Visual Studio-redigeringsfönstret. Alternativet

    Den här koden läggs till i Calculator.cpp:

    Skärmbild av Visual Studio-redigeraren som visar definitionen av funktionen Beräkna.

    Definitionen av funktionen är: double Calculator::Calculate( double x, char oper, double y) { return 0.0; }

    För närvarande returnerar den bara 0,0. Vi ändrar på det.

  4. Växla till Calculator.cpp filen i redigeringsfönstret. Ersätt innehållet i Calculator::Calculate(double x, char oper, double y) med:

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

    Förstå koden

    • Funktionen Calculate tar ett tal, en operator och ett andra tal. Sedan utför den begärda åtgärden på de två talen.
    • Utsagan switch kontrollerar vilken operator som har angetts och kör det fall som motsvarar den åtgärden. Situationen default: är en reservlösning om användaren skriver en operator som inte hanteras av någon av de tidigare case uttrycken. Det är bäst att hantera ogiltiga användarindata på ett mer elegant sätt, men det ligger utanför omfattningen för den här handledningen.
    • Nyckelordet double anger en typ av tal som stöder decimaler. Den här typen av tal kallas ett flyttalsnummer och double innebär ett flyttalnummer som har extra precision. På så sätt kan kalkylatorn hantera både decimal matematik och heltalsmatematik. Funktionen Calculate måste alltid returnera ett flyttal med dubbel precision på grund av double i början av koden (som anger funktionens returtyp), vilket är anledningen till att vi returnerar 0,0 i standardfallet.
    • Filen .h deklarerar funktionsprototypen, som talar om för kompilatorn i förväg vilka parametrar den behöver och vilken returtyp som ska förväntas av den. Filen .cpp innehåller all implementeringsinformation om funktionen.

Om du skapar och kör koden igen nu avslutas den omedelbart efter att du har frågat vilken åtgärd som ska utföras. Ändra funktionen så att den main utför flera beräkningar.

Anropa klassmedlemsfunktionerna Calculator

  1. Uppdatera funktionen i main enligt följande i CalculatorTutorial.cpp:

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

    Förstå koden

    • Eftersom C++-program alltid startar vid main() funktionen måste vi anropa vår andra kod därifrån, så det krävs en #include instruktion för att göra koden synlig för vår main() funktion.
    • Variablerna x, y, operoch result deklareras för att lagra det första talet, det andra talet, operatorn respektive slutresultatet. Det är alltid bra att ge dem några inledande värden för att undvika odefinierat beteende, vilket är vad som görs här.
    • Raden Calculator c; deklarerar ett objekt med namnet c som en instans av Calculator klassen. Själva klassen är bara en skiss för hur kalkylatorer fungerar. -objektet är den specifika kalkylatorn som utför matematiken.
    • Satsen while (true) är en loop. Koden i loopen körs om och om igen så länge villkoret i () är sant. Eftersom villkoret helt enkelt anges som trueär det alltid sant, så loopen körs för alltid. Om du vill stänga programmet måste användaren stänga konsolfönstret manuellt. Annars väntar programmet alltid på nya indata.
    • Nyckelordet cin accepterar indata från användaren. Indataströmmen är tillräckligt smart för att bearbeta en textrad som anges i konsolfönstret och placera den i var och en av de variabler som anges i ordning.
    • Uttrycket c.Calculate(x, oper, y); anropar funktionen Calculate som definierats tidigare och tillhandahåller de angivna indatavärdena och den begärda åtgärden. Funktionen returnerar sedan ett tal som lagras i result.
    • result Slutligen skrivs ut till konsolen och användaren ser resultatet av beräkningen.

Skapa och testa koden igen

Testa programmet igen för att se till att allt fungerar korrekt.

  1. Tryck på Ctrl+F5 för att återskapa och starta appen.

  2. Ange 5+5och tryck på Retur. Kontrollera att resultatet är 10.

    Skärmbild av ett kommandofönster som visar resultatet av att köra programmet.

    Appen matar ut meddelandet: Ange den åtgärd som ska utföras. Format: a+b | a-b | a*b | a/b. Användaren angav 5+5. Appens utdata: Resultatet 5+5 är: 10

  3. Stoppa programmet genom att stänga konsolfönstret.

Felsöka appen

Eftersom användaren kan skriva in allt i konsolfönstret ska vi se till att kalkylatorn hanterar oväntade indata. I stället för att köra programmet ska vi felsöka det så att vi kan kontrollera vad det gör steg för steg.

Kör appen i felsökningsprogrammet

  1. I CalcuatorTutorial.cpp sätter du en brytpunkt på raden: result = c.Calculate(x, oper, y);. Om du vill ange brytpunkten klickar du bredvid raden i det grå lodräta fältet längs redigeringsfönstrets vänstra kant så att en röd punkt visas.

    Skärmbild av Visual Studio-redigeraren. En röd punkt som representerar en brytpunkt visas på raden: result = c.Calculate(x, oper, y).

    Nu när vi felsöker programmet pausas körningen på den raden. Vi har redan en grov idé om att programmet fungerar för enkla fall. Eftersom vi inte vill pausa körningen varje gång vi anropar Calculate(), ska vi göra brytpunkten villkorlig.

  2. Högerklicka på den röda punkt som representerar brytpunkten och välj Villkor. I redigeringsrutan för villkoret anger du (y == 0) && (oper == '/'). Välj knappen Stäng för att spara brytpunktsvillkoret.

    Skärmbild av en inställd brytpunkt

    Brytpunkten är på raden: result = c punkt Beräkna ( x, oper, y). "Villkor..." Alternativet Villkor är markerat. Listrutan Villkor är inställd på "Villkorsuttryck". Villkorslistrutan är inställd på "Är sant". Villkoret är inställt på y == 0 && oper == '/'.

    Nu pausar körningen vid brytpunkten när appen försöker dividera med 0.

  3. Om du vill felsöka programmet trycker du på F5 eller väljer den lokala windows felsökningsprogrammets verktygsfältsknapp som har den gröna pilikonen. Om du anger något i stil med "5–0" i konsolappen fungerar programmet normalt och fortsätter att köras. Men om du skriver "10/0" pausas den vid brytpunkten. Du kan placera valfritt antal blanksteg mellan operatorn och talen: cin är tillräckligt smart för att parsa indata på rätt sätt.

    Skärmbild av Visual Studio-redigeraren. Programkörningen stoppades vid den villkorliga brytpunkten på raden: result = c.Calculate(x, oper, y);.

Användbara fönster i felsökningsprogrammet

När du felsöker koden kan det hända att vissa nya fönster visas. Dessa fönster kan hjälpa dig att felsöka. Ta en titt på Autos-fönstret. Fönstret Autos visar de aktuella värdena för variabler som används minst tre rader före och upp till den aktuella raden. Om du inte ser fönstret Autos väljer du Felsöka>Windows>Autos på huvudmenyn.

Skärmbild av Autos-fönstret i Visual Studio.

Värdet för oper är 47 '/', resultatet är 5, x är 10 och y är 0.

Om du vill se alla variabler från den funktionen växlar du till fönstret Lokal . Eftersom det här är en liten funktion visar fönstret Autos and Locals samma variabler. Men du kan ändra värdena för dessa variabler i fönstret Lokala under felsökning för att se vilken effekt de skulle ha på programmet. I det här fallet lämnar vi dem ensamma. Öppna fönstret Lokalt genom att välja Lokal längst ned i fönstret Autos eller genom att välja på huvudmenyn Felsöka>Windows>Locals.

Skärmbild av fönstret Locals i Visual Studio som visar aktuella värden för lokala variabler vid felsökning.

Värdet för oper är 47 "/", resultatet är 0, x är 10 och y är 0.

Du kan också hovra över variabler i koden för att se deras aktuella värden vid den punkt där körningen för närvarande pausas. Kontrollera att redigeringsfönstret är i fokus genom att klicka på det först.

Skärmbild av ett verktygstips som visar värdet för variabeln 'oper', som är 47 eller '/'.

Fortsätt felsökningen

  1. Den gula pilen till vänster visar den aktuella exekveringspunkten. Den aktuella raden anropar Calculate, så tryck på F11 för att stega in i funktionen. Nu kör du kod i kroppen av Calculate-funktionen. Var försiktig med Step Into eftersom den kliver in i vilka funktioner som helst på den rad där du befinner dig, inklusive funktioner från standardbiblioteket. Det är bra att gå in i standardbiblioteket, men du kanske är mer intresserad av att fokusera på din kod i stället för bibliotekskod.

  2. Nu när exekveringspunkten är i början av Calculate-funktionen, trycker du på F10 för att gå till nästa rad i programmet. F10 kallas även Step Over. Du kan använda Step Over för att flytta från rad till rad, utan att gå in på detaljer om vad som händer i varje del av raden. I allmänhet bör du använda Step Over i stället för Step Into om du inte vill fördjupa dig i kod som anropas från någon annanstans (som du gjorde för att nå brödtexten Calculatei ).

  3. Fortsätt att använda F10 för att stega över varje rad tills du kommer tillbaka till main() funktionen i den andra filen och stoppa på cout raden.

    Programmet gör vad som förväntas: det tar det första talet och delar det med det andra. cout Hovra över variabeln result på linjen eller ta en titt på result i fönstret Autos. Dess värde är inf, vilket inte ser rätt ut.

    Skärmbild av felsökning av kalkylatorn.

    Den aktuella instruktionen i felsökningsprogrammet är cout << "Result is: " << result << endl; I fönstret Autos är resultatet inf.

    Vi fixar det. Raden cout matar ut det värde som lagras i result, så när du går en rad framåt med F10 visas konsolfönstret:

    Skärmbild av Visual Studio-felsökningskonsolen som visar resultatet av en division med noll åtgärd.

    Appens utdata: Ange den åtgärd som ska utföras. Format: a+b | a-b | a*b | a/b. Användaren angav 5–0. Appens utdata: Resultatet är: 5. Användaren angav 10/0. Appens utdata: Resultatet är: inf

    Det här resultatet beror på att divisionen med noll är odefinierad, så programmet har inget numeriskt svar för den begärda åtgärden.

Åtgärda felet "dividera med noll"

Nu ska vi hantera division med noll mer smidigt så att det är lättare för användaren att förstå problemet.

  1. Gör följande ändringar i CalculatorTutorial.cpp. Du kan låta programmet köras medan du redigerar, tack vare en felsökningsfunktion med namnet Redigera och Fortsätt. Lägg till en if instruktion som följer cin >> x >> oper >> y; för att söka efter division med noll och skicka ett meddelande till användaren om det händer. Annars skrivs resultatet ut.

    // 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. Tryck på F5 en gång. Programkörningen fortsätter tills den måste pausas för att be om användarindata. Ange 10 / 0 igen. Nu skrivs ett mer användbart meddelande ut. Användaren uppmanas att ange mer indata och programmet fortsätter att köras normalt.

    Skärmbild av ett konsolfönster som visar de slutliga utdata när du har implementerat ändringar för att hantera division med noll.

    Konsolfönstret visar två rader: 10 /0 Resultatet är: inf, följt av 10/0 Matematiskt fel: Försök att dividera med noll.

    Anmärkning

    När du redigerar kod i felsökningsläge finns det en risk att koden blir inaktuell. Detta inträffar när felsökaren fortfarande kör din gamla kod och ännu inte har uppdaterat den med dina ändringar. Felsökningsprogrammet visar en dialogruta som informerar dig när detta händer. Ibland kan du behöva trycka på F5 för att uppdatera koden som körs. Om du gör en ändring i en funktion medan exekveringspunkten finns i den funktionen måste du stiga ut ur funktionen och sedan in igen för att hämta den uppdaterade koden. Om det inte fungerar och du ser ett felmeddelande kan du sluta felsöka genom att klicka på den röda rutan i verktygsfältet under menyerna överst i IDE och sedan börja felsöka igen genom att ange F5 eller genom att välja den gröna uppspelningspilen bredvid stoppknappen i verktygsfältet.

    En annan orsak till att redigering och fortsätt kan misslyckas är om du ser ett meddelande med texten "Kräv att källfilerna exakt matchar den ursprungliga versionsinställningen under Felsöka> alternativ–>Allmänt måste vara aktiverat..." Du kan åtgärda detta genom att välja Verktygsalternativ>>Felsöka>Allmänt på huvudmenyn och se till att Kräv att källfilerna exakt matchar den ursprungliga versionen är markerat.

    Förstå genvägarna för att köra och debugga

    • F5, eller Felsökning>Starta felsökning, startar en felsökningssession, om en inte redan är aktiv, och kör programmet tills en brytpunkt har träffats eller programmet behöver användarindata. Om ingen användarinmatning behövs och ingen brytpunkt finns för att träffas avslutas programmet och konsolfönstret stänger sig när programmet är klart. Om programmet matas ut till konsolen använder du Ctrl+F5 eller anger en brytpunkt innan du trycker på F5 för att hålla fönstret öppet.
    • Ctrl+F5, eller Felsök>Start utan felsökning, kör programmet utan att gå in i felsökningsläge. Detta är något snabbare än felsökning och konsolfönstret förblir öppet när programmet har körts klart.
    • Med F10, som kallas Step Over, kan du iterera genom kod, rad för rad och visualisera hur koden körs och vilka variabelvärden som finns i varje körningssteg.
    • F11, som kallas Step Into, fungerar på samma sätt som Step Over, förutom att den går in i alla funktioner som anropas på körningsraden. Om den rad som körs till exempel anropar en funktion, flyttar du pekaren genom att trycka på F11 till funktionens brödtext, så att du kan följa funktionens kod som körs innan du kommer tillbaka till den rad som du startade på. Om du trycker på F10 så kliver du över funktionsanropet och går vidare till nästa rad; funktionsanropet sker fortfarande, men programmet pausar inte för att visa vad det gör.

Stäng appen

  • Om den fortfarande körs stänger du konsolfönstret för att stoppa kalkylatorappen.

Lägg till Git-källkontroll

Nu när du har skapat en app kanske du vill lägga till den i en Git-lagringsplats. Vi hjälper dig. Visual Studio gör processen enkel med Git-verktyg som du kan använda direkt från IDE.

Tips/Råd

Git är det mest använda moderna versionskontrollsystemet, så oavsett om du är professionell utvecklare eller lär dig att koda kan Git vara mycket användbart. Om du är nybörjare på Git är https://git-scm.com/ webbplats ett bra ställe att börja på. Där hittar du fuskark, en populär onlinebok och Git Basics-videor.

Om du vill associera din kod med Git börjar du med att skapa en ny Git-lagringsplats där koden finns. Så här gör du:

  1. I statusfältet längst ned till höger i Visual Studio väljer du Lägg till i källkontroll och sedan Git.

    Skärmbild av git-källkontrollknapparna under fönstret Solution Explorer med knappen Lägg till i källkontroll markerad.

  2. I dialogrutan Skapa en Git-lagringsplats loggar du in på GitHub.

    Skärmbild av dialogrutan Skapa en Git-lagringsplats där du skapar en ny GitHub-lagringsplats.

    Lagringsplatsens namn fylls i automatiskt baserat på din mappplats. Som standard är den nya lagringsplatsen privat, vilket innebär att du är den enda som kan komma åt den.

    Tips/Råd

    Oavsett om lagringsplatsen är offentlig eller privat är det bäst att ha en fjärrsäkerhetskopia av koden lagrad på ett säkert sätt på GitHub. Även om du inte arbetar med ett team gör en fjärrlagringsplats din kod tillgänglig för dig från valfri dator.

  3. Välj Skapa och skicka.

    När du har skapat lagringsplatsen visas statusinformation i statusfältet.

    Skärmbild av lagringsplatsens statusfält nedanför fönstret Solution Explorer i Visual Studio, som visar grennamnet och antalet utestående ändringar.

    Den första ikonen med pilarna visar hur många utgående/inkommande commits som finns i din aktuella gren. Du kan använda den här ikonen för att hämta inkommande förändringar eller skicka utgående förändringar. Du kan också välja att visa dessa införanden först. Det gör du genom att välja ikonen och sedan Visa utgående/inkommande.

    Den andra ikonen med pennan visar antalet oincheckade ändringar i koden. Du kan välja den här ikonen om du vill visa ändringarna i fönstret Git-ändringar.

Mer information om hur du använder Git med din app finns i dokumentationen för versionskontroll i Visual Studio.

Den färdiga appen

Grattis! Du har slutfört koden för kalkylatorappen, skapat och debuggat den och lagt till den på en lagringsplats, allt i Visual Studio.

Nästa steg

Läs mer om Visual Studio för C++

Den vanliga startpunkten för en C++-programmerare är ett "Hello, world!"-program som körs på kommandoraden. Du börjar med det i den här artikeln och går sedan vidare till något mer utmanande: en kalkylatorapp.

Förutsättningar

Skapa ditt appprojekt

Visual Studio använder projekt för att organisera koden för en app och lösningar för att organisera ett eller flera projekt. Ett projekt innehåller alla alternativ, konfigurationer och regler som används för att skapa en app. Den hanterar också relationen mellan alla projektets filer och eventuella externa filer. Skapa din app genom att först skapa ett nytt projekt och en ny lösning.

  1. På menyraden i Visual Studio väljer du Arkiv>Nytt>projekt. Fönstret Nytt projekt öppnas.

  2. Kontrollera att Visual C++ är markerat i det vänstra sidofältet. I mitten väljer du Konsolapp.

  3. I textrutan Namn längst ned namnger du det nya projektet CalculatorTutorial och väljer sedan OK.

    Skärmbild av dialogrutan Nytt projekt.

    Till vänster är Andra språk > Visual C++ markerat. I mitten är projekttypen Konsolapp markerad. Textrutan Namn innehåller CalculatorTutorial.

    En tom "Hello World"-konsolapplikation för C++ i Windows har skapats. Konsolprogram använder ett Windows-konsolfönster för att visa utdata och acceptera användarindata. I Visual Studio öppnas ett redigeringsfönster och visar den genererade koden:

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

Kontrollera att din nya app bygger och körs

Mallen för ett nytt Windows-konsolprogram skapar en enkel C++ "Hello World"-app. Nu kan du se hur Visual Studio skapar och kör de appar som du skapar direkt från IDE:t.

  1. Om du vill skapa projektet väljer du Skapa lösning på menyn Skapa . Fönstret Utdata visar resultatet av byggprocessen.

    Skärmbild av visual studioutdatafönstret som visar att bygget lyckades.

  2. Om du vill köra koden går du till menyraden och väljer Felsök, Starta utan att felsöka (Ctrl+F5).

    Skärmbild av Visual Studio-felsökningskonsolen som visar utdata: Hello World!

    Ett konsolfönster öppnas och appen körs i den.

    När du startar en konsolapp i Visual Studio körs din kod och Press any key to close this window . . . skrivs ut så att du har en chans att se utmatningen.

    Grattis! Du skapade din första konsolapp "Hello, world!" i Visual Studio!

  3. Tryck på en tangent för att stänga konsolfönstret och återgå till Visual Studio.

Nu har du verktygen för att skapa och köra din app efter varje ändring för att kontrollera att koden fortfarande fungerar som förväntat. Senare visar vi hur du felsöker det om det inte fungerar.

Redigera koden

Nu ska vi omvandla koden i den här mallen till en kalkylatorapp.

  1. Ersätt innehållet i CalculatorTutorial.cpp filen med följande kod så att den matchar det här exemplet:

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

    Förstå koden:

    • Satsen #include importerar kod från andra filer. Ibland kan du se ett filnamn omgivet av vinkelparenteser som <iostream>. Vinkelparenteserna instruerar kompilatorn att leta efter huvudfilen först i standardsystemkatalogerna, och om den inte hittas ska den titta i kataloger som är specifika för iostream projektet. Andra gånger kan du se ett filnamn omgivet av citattecken som "someHeader.h". Citattecken instruerar kompilatorn att hoppa över att titta i standardsystemkatalogerna och i stället bara titta i kataloger som är specifika för projektet.
    • using namespace std; Instruerar kompilatorn att förvänta sig att kod från C++-standardbiblioteket ska användas i den här filen. Utan den här raden måste varje nyckelord från biblioteket föregås av std:: för att ange dess omfång. Utan den raden skrivs till exempel varje referens till cout som std::cout. -instruktionen using läggs till för att göra det enklare att komma åt kod i ett annat namnområde.
    • Nyckelordet cout skriver ut till standardutgång i C++. Operatorn << uppmanar kompilatorn att skicka det som är till höger om den till standardutdata.
    • Nyckelordet endl är som returnyckeln. Det avslutar raden och flyttar markören till nästa rad. Det är en bättre praxis att placera en \n inuti strängen (som finns i "") för att göra samma sak eftersom endl alltid rensar bufferten och kan skada programmets prestanda. Men eftersom det här är en mycket liten app endl används den i stället.
    • Alla C++-instruktioner måste sluta med semikolon och alla C++-program måste innehålla en main() funktion. Den här funktionen är vad programmet kör i början. All kod måste vara tillgänglig från main() för att kunna användas.
  2. Spara filen genom att trycka på Ctrl+S eller välja diskettikonen i verktygsfältet under menyraden.

  3. Om du vill köra programmet trycker du på Ctrl+F5 eller går till felsökningsmenyn och väljer Starta utan felsökning. Om du får ett popup-fönster med texten Det här projektet är inaktuellt kan du välja Visa inte dialogrutan igen och sedan välja Ja för att skapa programmet. Du bör se ett konsolfönster som ser ut så här:

    Skärmbild av kalkylatorappen som körs i ett konsolfönster.

    Konsolappen visar följande utdata: Kalkylator-konsolapplikation. Ange den åtgärd som ska utföras. Format: a+b | a-b | a*b | a/b. Processen avslutades med kod 0 och det finns ett meddelande om att om du vill stänga konsolen automatiskt när felsökningen stoppas aktiverar du Verktyg > Alternativ > Felsökning > Stäng konsolen automatiskt när felsökningen stoppas. Slutligen finns det ett meddelande om att trycka på valfri tangent för att stänga det här fönstret.

  4. Stäng konsolfönstret när du är klar.

Lägg till kod för att göra lite matematik

En klass är som en skiss för ett objekt som gör något. I det här fallet definierar vi en kalkylatorklass som ska innehålla matematiklogik.

Lägga till en kalkylatorklass

  1. Gå till menyn Projekt och välj Lägg till klass. I redigeringsrutan Klassnamn anger du Kalkylator. Välj OK.

    Skärmbild av dialogrutan Lägg till klass i Visual Studio.

    Fältet klassnamn innehåller textkalkylatorn. Filfältet .h innehåller Calculator.h. Filfältet .cpp innehåller Calculator.cpp. Basklassfältet är tomt. Alternativen för infogade och hanterade är avmarkerade.

    En klass är som en skiss för ett objekt som gör något. I det här fallet definierar vi en kalkylator och hur den ska fungera.

    Två nya filer läggs till i projektet. Om du vill spara alla dina ändrade filer samtidigt trycker du på Ctrl+Skift+S. Det är ett kortkommando för Fil>. Det finns också en verktygsfältsknapp för Spara alla, en ikon på två diskettdiskar, som finns bredvid knappen Spara . I allmänhet är det bra att göra Spara alla ofta, så att du inte missar några filer när du sparar.

    Guiden Lägg till klass skapar .h och .cpp filer som har samma namn som klassen. Du kan se en fullständig lista över dina projektfiler i Solution Explorer-fönstret , som visas på sidan av IDE. Om Solution Explorer inte visas öppnar du den från menyraden: välj Visa>Solution Explorer.

    Skärmbild av fönstret Visual Studio Solution Explorer.

    Självstudieprojektet för kalkylatorn har en nod för huvudfiler som innehåller Calculator.h, stdafx.h och targetver.h. Noden Källfiler innehåller Calculator.cpp, CalculatorTutorial.cpp och stdafx.cpp. Noder för referenser, externa beroenden och resursfiler är synliga men stängda.

    Du kan öppna en fil genom att dubbelklicka på den i Solution Explorer-fönstret . Dubbelklicka på Calculator.h för att öppna den.

  2. Ersätt innehållet i Calculator.h med följande kod så att filen nu ser ut så här:

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

    Förstå koden

    • Den här koden deklarerar en ny funktion med namnet Calculate, som hanterar matematiska åtgärder för addition, subtraktion, multiplikation och division.
    • C++-kod ordnas i huvudfiler (.h) och källfiler (.cpp). Vissa andra filnamnstillägg stöds av olika kompilatorer, men dessa är de viktigaste filnamnstilläggen att känna till. Funktioner och variabler deklareras normalt, d.v.s. med ett namn och en typ, i huvudfiler och implementeras, eller ges en definition, i källfiler. Om du vill komma åt kod som definierats i en annan fil kan du använda #include "filename.h", där filename.h är namnet på filen som deklarerar de variabler eller funktioner som du vill använda.
    • Det är bra att organisera koden i olika filer baserat på vad den gör, så det är enkelt att hitta den kod du behöver senare. I vårt fall definierar Calculator vi klassen separat från filen som innehåller main() funktionen, men vi planerar att referera Calculator till klassen i main().
  3. En grön squiggle visas under Calculate eftersom även Calculate om funktionen hardeklarerats är den inte definierad. Hovra över Calculate, klicka på nedåtpilen på glödlampan och välj Skapa definition av "Beräkna" i Calculator.cpp. Ett popup-fönster visas som ger dig en titt på kodändringen som gjordes i den andra filen. Koden lades till i Calculator.cpp.

    Video som visar användningen av listrutan med glödlampan för att välja "Skapa definition för Beräkna" i Calculator.cpp.

    För närvarande returnerar den bara 0,0. Vi ändrar på det. Tryck på Esc för att stänga popup-fönstret och välj Ja för att spara ändringarna.

  4. Växla till Calculator.cpp filen i redigeringsfönstret. Ersätt innehållet i filen med följande kod:

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

    Förstå koden

    • Funktionen Calculate tar ett tal, en operator och ett andra tal. Sedan utför den begärda åtgärden på de två talen.
    • Utsagan switch kontrollerar vilken operator som har angetts och kör det fall som motsvarar den åtgärden. Situationen default: är en reservlösning om användaren skriver en operator som inte hanteras av någon av de tidigare case uttrycken. Det är bäst att hantera ogiltiga användarindata på ett mer elegant sätt, men det ligger utanför omfattningen för den här handledningen.
    • Nyckelordet double anger en typ av tal som stöder decimaler. Den här typen av tal kallas ett flyttalsnummer och double innebär ett flyttalnummer som har extra precision. På så sätt kan kalkylatorn hantera både decimal matematik och heltalsmatematik. Funktionen Calculate måste alltid returnera ett flyttal med dubbel precision på grund av double i början av koden (som anger funktionens returtyp), vilket är anledningen till att vi returnerar 0,0 i standardfallet.
    • Filen .h deklarerar funktionsprototypen, som talar om för kompilatorn i förväg vilka parametrar den behöver och vilken returtyp som ska förväntas av den. Filen .cpp innehåller all implementeringsinformation om funktionen.

Om du skapar och kör koden igen nu avslutas den fortfarande när du har frågat vilken åtgärd som ska utföras. Ändra sedan funktionen så att den main utför vissa beräkningar.

Anropa medlemsfunktionerna för klassen Calculator

  1. Uppdatera funktionen i main enligt följande i 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;
    }
    

    Förstå koden

    • Eftersom C++-program alltid startar vid main() funktionen måste vi anropa vår andra kod därifrån, så det krävs en #include instruktion för att göra koden synlig för vår main() funktion.
    • Variablerna x, y, operoch result deklareras för att lagra det första talet, det andra talet, operatorn respektive slutresultatet. Det är alltid bra att ge dem några inledande värden för att undvika odefinierat beteende, vilket är vad som görs här.
    • Raden Calculator c; deklarerar ett objekt med namnet c som en instans av Calculator klassen. Själva klassen är bara en skiss för hur kalkylatorer fungerar. -objektet är den specifika kalkylatorn som utför matematiken.
    • Satsen while (true) är en loop. Koden i loopen körs om och om igen så länge villkoret inuti () är sann. Eftersom villkoret helt enkelt anges som trueär det alltid sant, så loopen körs för alltid. Om du vill stänga programmet måste användaren stänga konsolfönstret manuellt. Annars väntar programmet alltid på nya indata.
    • Nyckelordet cin accepterar indata från användaren. Indataströmmen är tillräckligt smart för att bearbeta en textrad som anges i konsolfönstret och placera den i var och en av de variabler som anges i ordning.
    • Uttrycket c.Calculate(x, oper, y); anropar funktionen Calculate som definierats tidigare och tillhandahåller de angivna indatavärdena och den begärda åtgärden. Funktionen returnerar sedan ett tal som lagras i result.
    • result Slutligen skrivs ut till konsolen och användaren ser resultatet av beräkningen.

Skapa och testa koden igen

Testa programmet igen för att se till att allt fungerar korrekt.

  1. Tryck på Ctrl+F5 för att återskapa och starta appen.

  2. Ange 5+5och tryck på Retur. Kontrollera att resultatet är 10.

    Skärmbild av ett kommandofönster som kör kalkylatorappen. Det visar att resultatet av 5 + 5 är 10.

  3. Stoppa programmet genom att stänga konsolfönstret.

Felsöka appen

Eftersom användaren kan skriva in allt i konsolfönstret ska vi se till att kalkylatorn hanterar oväntade indata. I stället för att köra programmet ska vi felsöka det i stället, så att vi kan kontrollera vad det gör steg för steg.

Kör appen i felsökningsprogrammet

  1. I CalcuatorTutorial.cpp sätter du en brytpunkt på result = c.Calculate(x, oper, y);-raden. Om du vill ange brytpunkten klickar du bredvid raden i det grå lodräta fältet längs redigeringsfönstrets vänstra kant så att en röd punkt visas.

    Skärmbild av användaren som anger en brytpunkt på rad 23: result = c.Calculate(x, oper, y);.

    Nu när du felsöker programmet pausar det alltid programmets körning på den raden. Vi har redan en grov idé om att programmet fungerar för enkla fall. Eftersom vi inte vill pausa utförandet varje gång ska vi göra brytpunkten villkorad.

  2. Högerklicka på den röda punkt som representerar brytpunkten och välj Villkor. I redigeringsrutan för villkoret anger du (y == 0) && (oper == '/'). Välj knappen Stäng när du är klar för att spara brytpunktsvillkoret.

    Skärmdump som visar fönstret för villkorsstyrd brytpunkt.

    Brytpunkten är på raden: result = c punkt Beräkna ( x, oper, y). "Villkor..." Alternativet Villkor är markerat. Listrutan Villkor är inställd på "Villkorsuttryck". Villkorslistrutan är inställd på "Är sant". Villkoret är inställt på y == 0 && oper == '/'.

    Körningen pausas vid brytpunkten om ett försök till division med 0 görs.

  3. Om du vill felsöka programmet trycker du på F5 eller väljer verktygsfältsknappen Lokalt Windows-felsökningsprogram som har den gröna pilikonen. Om du anger något i stil med "5–0" i konsolappen fungerar programmet normalt och fortsätter att köras. Men om du skriver "10/0" pausas den vid brytpunkten. Du kan till och med placera valfritt antal blanksteg mellan operatorn och talen. cin är tillräckligt smart för att parsa indata på rätt sätt.

    Video som visar programkörningen som är pausad vid en villkorlig brytpunkt.

    Användaren anger 5–0. Appens utdata: Resultatet är 5. Användaren anger sedan 10/0 och eftersom villkoret för den villkorliga brytpunkten uppfylls stoppas körningen på raden: result = c.Calculate(x, oper, y);

Användbara fönster i felsökningsprogrammet

När du felsöker koden kan det hända att vissa nya fönster visas. Dessa fönster kan hjälpa dig att felsöka. Ta en titt på Autos-fönstret. Fönstret Autos visar de aktuella värdena för variabler som används minst tre rader före och upp till den aktuella raden. Om du inte ser fönstret Autos väljer du Felsöka>Windows>Autos på huvudmenyn.

Skärmbild av Autos-fönstret i Visual Studio.

Värdet för oper är 47 '/', resultatet är 5, x är 10 och y är 0.

Om du vill se alla variabler från den funktionen växlar du till fönstret Lokal . Eftersom det här är en liten funktion visar fönstret Autos and Locals samma variabler. Men du kan ändra värdena för dessa variabler vid felsökning för att se vilken effekt de skulle ha på programmet. I det här fallet lämnar vi dem ensamma. Öppna fönstret Lokalt genom att välja Lokal längst ned i fönstret Autos eller genom att välja på huvudmenyn Felsöka>Windows>Locals.

Skärmbild av fönstret Locals i Visual Studio som visar aktuella värden för lokala variabler vid felsökning.

Värdet för oper är 47 "/", resultatet är 0, x är 10 och y är 0.

Du kan också hovra över variabler i själva koden för att se deras aktuella värden där körningen för närvarande är pausad. Kontrollera att redigeringsfönstret är i fokus genom att klicka på det först.

Video som visar en knappbeskrivning som visas när du hovrar över variabeln y. Den visar y:s aktuella värde, som är 0.

Fortsätt felsökningen

  1. Den gula pilen till vänster visar den aktuella exekveringspunkten. Den aktuella raden anropar Calculate, så tryck på F11 för att stega in i funktionen, vilket tar dig in i funktionens Calculate brödtext. Var försiktig med Step Into eftersom den kliver in i vilka funktioner som helst på den rad där du befinner dig, inklusive funktioner från standardbiblioteket. Det är bra att gå in i standardbiblioteket, men du kanske är mer intresserad av att fokusera på din kod i stället för bibliotekskod.

  2. Nu när exekveringspunkten är i början av Calculate-funktionen, trycker du på F10 för att gå till nästa rad i programmet. F10 kallas även Step Over. Du kan använda Step Over för att flytta från rad till rad, utan att gå in på detaljer om vad som händer i varje del av raden. I allmänhet bör du använda Step Over i stället för Step Into, såvida du inte vill fördjupa dig i kod som anropas från en annan plats (som du gjorde för att nå brödtexten Calculatei ).

  3. Fortsätt att använda F10 för att stega över varje rad tills du kommer tillbaka till main() funktionen i den andra filen och stoppa på cout raden.

    Programmet gör vad som förväntas: det tar det första talet och delar det med det andra. cout Hovra över variabeln result på linjen eller ta en titt på result i fönstret Autos. Dess värde är inf, vilket inte ser rätt ut.

    Skärmbild av felsökning av kalkylatorn.

    Den aktuella instruktionen i felsökningsprogrammet är cout << "Result is: " << result << endl; I fönstret Autos är resultatet inf.

    Vi fixar det. Raden cout matar ut det värde som lagras i result, så när du går en rad framåt med F10 visas konsolfönstret:

    Skärmbild av Visual Studio-felsökningskonsolen som visar resultatet av en division med noll åtgärd.

    Appens utdata: Ange den åtgärd som ska utföras. Format: a+b | a-b | a*b | a/b. Användaren angav 5–0. Appens utdata: Resultatet är: 5. Användaren angav 10/0. Appens utdata: Resultatet är: inf

    Det här resultatet beror på att divisionen med noll är odefinierad, så programmet har inget numeriskt svar för den begärda åtgärden.

Åtgärda felet "dividera med noll"

Nu ska vi hantera division med noll mer smidigt så att det är lättare för användaren att förstå problemet.

  1. Gör följande ändringar i CalculatorTutorial.cpp. (Du kan låta programmet köras när du redigerar, tack vare en felsökningsfunktion med namnet Redigera och fortsätt). Ändringen är att lägga till en if instruktion som följer cin >> x >> oper >> y; för att söka efter division med noll och mata ut ett meddelande till användaren om det händer. Annars skrivs resultatet ut:

    // 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. Tryck på F5 en gång. Programkörningen fortsätter tills den måste pausas för att be om användarindata. Ange 10 / 0 igen. Nu skrivs ett mer användbart meddelande ut. Användaren uppmanas att ange mer indata och programmet fortsätter att köras normalt.

    Video av felsökningskonsolen som visar slutresultatet efter kodändringar. 10/0 anges och programmet visar

    Anmärkning

    När du redigerar kod i felsökningsläge finns det en risk att koden blir inaktuell. Detta inträffar när felsökaren fortfarande kör din gamla kod och ännu inte har uppdaterat den med dina ändringar. Felsökningsprogrammet öppnar en dialogruta för att informera dig när detta händer. Ibland kan du behöva trycka på F5 för att uppdatera koden som körs. Om du gör en ändring i en funktion medan körningspunkten finns i den, gå ut ur funktionen och gå sedan tillbaka in i den igen för att få den uppdaterade koden. Om det inte fungerar av någon anledning och du ser ett felmeddelande kan du sluta felsöka genom att klicka på den röda rutan i verktygsfältet under menyerna överst i IDE:n och sedan börja felsöka igen genom att ange F5 eller genom att välja den gröna uppspelningspilen bredvid stoppknappen i verktygsfältet.

    En annan orsak till att det inte går att redigera och fortsätta är att du måste gå till huvudmenyn och välja Verktygsalternativ>>Felsökning>Allmänt och se till att Kräv källfiler för att exakt matcha den ursprungliga versionen är markerat.

    Förstå genvägarna för att köra och debugga

    • F5, eller Felsökning>Starta felsökning, startar en felsökningssession, om en inte redan är aktiv, och kör programmet tills en brytpunkt har träffats eller programmet behöver användarindata. Om ingen användarinmatning behövs och ingen brytpunkt finns för att träffas avslutas programmet och konsolfönstret stänger sig när programmet är klart. Om programmet matas ut till konsolen använder du Ctrl+F5 eller anger en brytpunkt innan du trycker på F5 för att hålla fönstret öppet.
    • Ctrl+F5, eller Felsök>Start utan felsökning, kör programmet utan att gå in i felsökningsläge. Detta är något snabbare än felsökning och konsolfönstret förblir öppet när programmet har körts klart.
    • Med F10, som kallas Step Over, kan du iterera genom kod, rad för rad och visualisera hur koden körs och vilka variabelvärden som finns i varje körningssteg.
    • F11, som kallas Step Into, fungerar på samma sätt som Step Over, förutom att den går in i alla funktioner som anropas på körningsraden. Om den rad som körs till exempel anropar en funktion, flyttar du pekaren genom att trycka på F11 till funktionens brödtext, så att du kan följa funktionens kod som körs innan du kommer tillbaka till den rad som du startade på. Om du trycker på F10 så kliver du över funktionsanropet och går vidare till nästa rad; funktionsanropet sker fortfarande, men programmet pausar inte för att visa vad det gör.

Stäng appen

  • Om den fortfarande körs stänger du konsolfönstret för att stoppa kalkylatorappen.

Den färdiga appen

Grattis! Du har slutfört koden för kalkylatorappen och skapat och debuggat den i Visual Studio.

Nästa steg

Läs mer om Visual Studio för C++