Erstellen eines Konsolenrechners in C++

Der übliche Ausgangspunkt für einen C++-Programmierer ist eine Anwendung "Hello, world!", die auf der Befehlszeile ausgeführt wird. Sie beginnen mit dieser App in diesem Artikel und wechseln dann zu einer schwierigeren Aufgabe: einer Rechner-App.

Voraussetzungen

  • Visual Studio mit der installierten Workload „Desktopentwicklung mit C++“. Weitere Informationen finden Sie unter Installieren der C++-Unterstützung in Visual Studio.
  • In diesem Lernprogramm wird eine Funktion namens Edit and Continue vorgestellt, mit der Sie Änderungen an Ihrem Code vornehmen können, während die App läuft. Um die Bearbeitung zu aktivieren und fortzufahren, wählen Sie im Hauptmenü "Extras>Optionen>Debuggen>Allgemein " aus, und wählen Sie "Quelldateien erforderlich" aus, um genau mit der ursprünglichen Version übereinzustimmen.

Erstellen Ihres App-Projekts

Visual Studio verwendet Projekte zum Organisieren des Codes für eine App und Lösungen zum Organisieren eines oder mehrerer Projekte. Ein Projekt enthält die Optionen, Konfigurationen und Regeln, die zum Erstellen einer App verwendet werden. Außerdem wird die Beziehung zwischen den Dateien des Projekts und allen externen Dateien verwaltet. Um Ihre App zu erstellen, erstellen Sie zuerst ein neues Projekt und eine neue Lösung.

  1. Starten Sie Visual Studio. Das Dialogfeld "Visual Studio Start" wird angezeigt. Wählen Sie Neues Projekt erstellen aus.

    Screenshot des Dialogfelds, das angezeigt wird, wenn Visual Studio mit hervorgehobener Option

    Das Dialogfeld bietet Optionen zum Klonen eines Repositorys, Öffnen eines Projekts oder einer Projektmappe, Öffnen eines lokalen Ordners und Erstellen eines neuen Projekts."

  2. Legen Sie im Dialogfeld "Neues Projekt erstellen" die Sprache auf C++ fest, legen Sie die Plattform auf Windows fest, wählen Sie "Konsolen-App" aus der Liste der Projekttypen und dann "Weiter" aus.

    Screenshot des Dialogfelds „Neues Projekt erstellen“ in Visual Studio mit hervorgehobener Konsolen-App.

    Die Sprache ist auf C++ festgelegt, die Plattform ist auf Windows festgelegt, und Projekttypen wie Leeres Projekt, Konsolen-App, CMake-Projekt und Windows-Desktop-Assistent erscheinen in der Liste der Projekttypen.

    Von Bedeutung

    Stellen Sie sicher, dass Sie die C++-Version der Konsolen-App-Vorlage auswählen. Es enthält die C++-, Windows- und Konsolentags, und das Symbol hat "++" in der Ecke.

  3. Wählen Sie in Konfigurieren Sie Ihr neues Projekt das Textfeld Projektname aus, benennen Sie Ihr neues Projekt CalculatorTutorial, und wählen Sie dann Erstellen aus.

    Screenshot des Visual-Studio-Dialogfelds „Ihr neues Projekt konfigurieren“ mit Feldern für Projektname, Projektstandort und Projektmappenname.

    Eine leere C++-Windows Konsolenanwendung "Hallo Welt"-App wird erstellt. Konsolenanwendungen verwenden ein Windows-Konsolenfenster, um die Ausgabe anzuzeigen und Benutzereingaben zu akzeptieren. In Visual Studio wird ein Editorfenster geöffnet und zeigt den generierten Code an:

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

Überprüfen, ob Ihre neue App erstellt und ausgeführt wird

Die Vorlage für eine neue Windows-Konsolenanwendung erstellt eine einfache C++-App "Hallo Welt". An diesem Punkt können Sie sehen, wie Visual Studio die von Ihnen erstellten Apps direkt aus der IDE erstellt und ausführt.

  1. Um Ihr Projekt zu erstellen, wählen Sie im Menü Erstellen die Option Projektmappe erstellen aus. Das Ausgabefenster zeigt die Ergebnisse des Buildprozesses an.

    Screenshot des Ausgabefensters von Visual Studio mit einer Meldung, dass der Build erfolgreich abgeschlossen wurde.

  2. Wenn Sie den Code ausführen möchten, wählen Sie auf der Menüleiste " Debuggen>starten" ohne Debugging aus (STRG+F5).

    Screenshot der Visual Studio-Debugkonsole mit der Ausgabe der Anwendung: Hallo Welt!

    Ein Konsolenfenster wird geöffnet, und Ihre App wird darin ausgeführt.

    Wenn Sie eine Konsolen-App in Visual Studio starten, wird Ihr Code ausgeführt, und dann wird "Drücken Sie eine beliebige Taste, um dieses Fenster zu schließen. . ." um Ihnen die Möglichkeit zu geben, die Ausgabe zu sehen.

    Glückwunsch! Sie haben Ihre erste Konsolen-App "Hello, world!" in Visual Studio erstellt!

  3. Drücken Sie eine Taste, um das Konsolenfenster zu schließen und zu Visual Studio zurückzukehren.

Sie verfügen jetzt über die Tools zum Erstellen und Ausführen Ihrer App nach jeder Änderung, um sicherzustellen, dass der Code weiterhin wie erwartet funktioniert. Später erfahren Sie, wie Sie den Code debuggen, wenn er nicht funktioniert.

Bearbeiten des Codes

Ändern Sie nun den Code in dieser Vorlage in eine Taschenrechner-App um.

  1. Ersetzen Sie den Inhalt der CalculatorTutorial.cpp Datei durch den folgenden Code, damit er diesem Beispiel entspricht:

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

    Grundlegendes zum Code:

    • Die #include Anweisung importiert Code aus anderen Dateien. Manchmal sehen Sie einen Dateinamen, der von spitzen Klammern wie <iostream> umgeben ist. Die winkeligen Klammern weisen den Compiler an, zuerst in den Standardsystemverzeichnissen nach der iostream Headerdatei zu suchen, und wenn nicht gefunden, in Verzeichnissen zu suchen, die für das Projekt spezifisch sind. Manchmal sehen Sie möglicherweise einen Dateinamen in Anführungszeichen wie "someHeader.h". Die Anführungszeichen weisen den Compiler an, die Suche in den Standardsystemverzeichnissen zu überspringen und stattdessen nur in Verzeichnissen zu suchen, die für das Projekt spezifisch sind.
    • Der using namespace std; teilt dem Compiler mit, dass Code aus der C++-Standardbibliothek in dieser Datei verwendet werden soll. Ohne diese Zeile müsste jedem Schlüsselwort aus der Bibliothek vorangestellt std:: werden, um den Bereich zu kennzeichnen. Ohne diese Zeile würde beispielsweise jeder Bezug auf cout als std::cout geschrieben werden. Die using Anweisung wird hinzugefügt, um den Zugriff auf Code in einem anderen Namespace zu erleichtern.
    • Das cout Schlüsselwort wird verwendet, um die Standardausgabe in C++ zu drucken. Der << Operator weist den Compiler an, alles, was rechts davon ist, an die Standardausgabe zu senden.
    • Das endl Schlüsselwort entspricht der EINGABETASTE. Sie beendet die Linie und verschiebt den Cursor zur nächsten Zeile. Es ist eine bessere Praxis, innerhalb der Zeichenfolge (enthalten in \n) ein "" zu platzieren, um dasselbe zu erreichen, da endl immer den Puffer leert, was die Leistung des Programms verlangsamen kann. Da dies eine sehr kleine App ist, endl wird stattdessen verwendet.
    • Alle C++-Anweisungen müssen mit Semikolons enden, und alle C++-Anwendungen müssen eine main() Funktion enthalten. Diese Funktion ist das, was das Programm am Anfang ausführt. Der gesamte Code muss von main() aus zugänglich sein, damit er verwendet werden kann.
  2. Um die Datei zu speichern, drücken Sie STRG+S, oder wählen Sie auf der Symbolleiste unter der Menüleiste das Diskettensymbol aus.

  3. Um die Anwendung auszuführen, drücken Sie STRG+F5 , oder wechseln Sie zum Menü "Debuggen ", und wählen Sie "Ohne Debuggen starten" aus. Daraufhin sollte ein Konsolenfenster erscheinen.

  4. Schließen Sie das Konsolenfenster, wenn Sie fertig sind.

Hinzufügen von Code zum Ausführen einiger Mathematischer Berechnungen

Eine Klasse ist wie eine Blaupause für ein Objekt, das etwas tut. Definieren Sie in diesem Fall eine Rechnerklasse, die die mathematische Logik enthält.

Hinzufügen einer Rechnerklasse

  1. Wechseln Sie zum Menü "Projekt ", und wählen Sie "Klasse hinzufügen" aus. Geben Sie für KlassennameCalculator ein. Wählen Sie OK aus.

    Screenshot des Dialogfelds

    Das Feld "Klassenname" enthält den Textrechner. Das H-Dateifeld enthält "Calculator.h". Das .cpp Dateifeld enthält Calculator.cpp. Das Basisklassenfeld ist leer. Die Optionen für "Inline" und "Verwaltet" sind deaktiviert.

    Ihrem Projekt werden zwei neue Dateien hinzugefügt. Um alle geänderten Dateien gleichzeitig zu speichern, drücken Sie STRG+UMSCHALT+S. Es ist eine Tastenkombination für "Datei>Alle speichern". Es gibt auch eine Symbolleistenschaltfläche für "Alle speichern", ein Symbol von zwei Disketten, die neben der Schaltfläche " Speichern " zu finden sind. Im Allgemeinen empfiehlt es sich, " Alle speichern" häufig zu erledigen, sodass Sie keine Änderungen verpassen.

    Das Dialogfeld "Klasse hinzufügen " erstellt .h und .cpp Dateien mit demselben Namen wie die Klasse. Im Projektmappen-Explorer-Fenster können Sie eine vollständige Liste Ihrer Projektdateien sehen, die am Rand der IDE sichtbar ist. Wenn das Fenster nicht sichtbar ist, öffnen Sie es über die Menüleiste, indem Sie "Ansicht>" auswählen Projektmappen-Explorer.

    Screenshot des Visual Studio-Projektmappen-Explorer-Fensters.

    Das Rechner-Tutorial-Projekt verfügt über einen Headerdateien-Knoten mit Calculator.h. Ein Knoten "Quelldateien" enthält Calculator.cpp und CalculatorTutorial.cpp. Knoten für Verweise, externe Abhängigkeiten und Ressourcendateien sind sichtbar, aber geschlossen.

    Sie können eine Datei öffnen, indem Sie im Projektmappen-Explorer-Fenster darauf doppelklicken. Zum Öffnen Calculator.hdoppelklicken Sie darauf.

  2. Ersetzen Sie den Inhalt von Calculator.h mit dem folgenden Code, sodass die Datei jetzt so aussieht.

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

    Grundlegendes zum Code

    • Dieser Code deklariert eine neue Funktion, die mathematische CalculateVorgänge für Addition, Subtraktion, Multiplikation und Division behandelt.
    • C++-Code ist in Headerdateien () und .h (.cpp) angeordnet. Einige andere Dateierweiterungen werden von verschiedenen Compilern unterstützt, aber dies sind die wichtigsten, die Sie kennen sollten. Funktionen und Variablen werden normalerweise deklariert, das heißt, dass sie einen Namen und einen Typ in Header-Dateien bekommen, und implementiert oder in Quell-Dateien definiert werden. Um auf code zuzugreifen, der in einer anderen Datei definiert ist, können Sie verwenden #include "filename.h", wobei filename.h der Name der Datei ist, die die Variablen oder Funktionen deklariert, die Sie verwenden möchten.
    • Es empfiehlt sich, Ihren Code basierend auf ihrer Funktionsweise in verschiedene Dateien zu organisieren, sodass sie den code, den Sie später benötigen, ganz einfach finden. In diesem Fall definieren Sie die Calculator Klasse getrennt von der Datei, die die main() Funktion enthält, aber Sie planen, auf die Calculator Klasse zu verweisen in main().
  3. Eine grüne Wellenlinie erscheint unter Calculate, da die Calculate Funktion zwar deklariert wird, sie aber nicht definiert ist. Zeigen Sie mit der Maus auf Calculate, wählen Sie den Pfeil nach unten auf dem Symbol mit dem Schraubendreher aus, und wählen Sie Definition von „Calculate“ in Calculator.cpp erstellen.

    Screenshot der Dropdownliste „Schraubendreher“ im Visual Studio-Editor-Fenster, wobei die Option „Definition von Calculate in Calculator.cpp erstellen“ hervorgehoben ist.

    Dieser Code wird hinzugefügt zu Calculator.cpp:

    Screenshot des Visual Studio-Editors mit der Definition der Funktion

    Die Definition der Funktion lautet: double Calculator::Calculate( double x, char oper, double y) { return 0,0; }

    Derzeit wird nur 0,0 zurückgegeben. Das ändern wir jetzt.

  4. Wechseln Sie im Editorfenster zur Calculator.cpp Datei. Ersetzen Sie den Inhalt von Calculator::Calculate(double x, char oper, double y) durch:

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

    Grundlegendes zum Code

    • Die Funktion Calculate verwendet eine Zahl, einen Operator und eine zweite Zahl. Anschließend führt sie den angeforderten Vorgang für die beiden Nummern aus.
    • Die switch Anweisung überprüft, welcher Operator bereitgestellt wurde, und führt den Fall aus, der diesem Vorgang entspricht. Der default: Fall ist ein Fallback, falls der Benutzer einen Operator eingibt, der von keiner der vorherigen case Anweisungen behandelt wird. Es empfiehlt sich, ungültige Benutzereingaben eleganter zu behandeln, dies liegt jedoch außerhalb des Umfangs dieses Lernprogramms.
    • Das double Schlüsselwort zeigt einen Zahlentyp an, der Dezimalstellen unterstützt. Dieser Zahlentyp wird als Gleitkommazahl bezeichnet und double bedeutet eine Gleitkommazahl mit zusätzlicher Genauigkeit. Auf diese Weise kann der Rechner sowohl Dezimalmathematik als auch Ganzzahlmathematik verarbeiten. Die Calculate Funktion ist erforderlich, um immer eine Gleitkommazahl mit doppelter Genauigkeit aufgrund des double Codeanfangs zurückzugeben (dies bezeichnet den Rückgabetyp der Funktion), weshalb das Programm 0,0 im Standardfall zurückgibt.
    • Die .h Datei deklariert den Funktionsprototyp, der dem Compiler vorab angibt, welche Parameter erforderlich sind, und welche Rückgabetyp davon erwartet werden soll. Die .cpp Datei enthält alle Implementierungsdetails der Funktion.

Wenn Sie den Code zu diesem Zeitpunkt erstellen und erneut ausführen, wird er sofort beendet, nachdem Sie gefragt haben, welcher Vorgang ausgeführt werden soll. Ändern Sie also die main Funktion so, dass mehrere Berechnungen ausgeführt werden.

Rufen Sie die Calculator Klassenmitgliedsfunktionen auf

  1. Aktualisieren Sie die Funktion in main wie folgt:

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

    Grundlegendes zum Code

    • Da C++-Programme immer an der main() Funktion beginnen, müssen Sie anderen Code von dort aufrufen, daher ist eine #include Anweisung erforderlich, um diesen Code für unsere main() Funktion sichtbar zu machen.
    • Die Variablen x, y, , operund result werden deklariert, um die erste Zahl, die zweite Zahl, den Operator bzw. das Endergebnis zu speichern. Es empfiehlt sich immer, ihnen einige anfängliche Werte zu geben, um nicht definierte Verhaltensweisen zu vermeiden, was hier getan wird.
    • Die Zeile Calculator c; deklariert ein Objekt namens c als eine Instanz der Klasse Calculator. Die Klasse selbst ist nur eine Blaupause für die Funktionsweise von Rechnern. Das Objekt ist der spezifische Rechner, der die Mathematik ausführt.
    • Die while (true)-Anweisung ist eine Schleife. Der Code innerhalb der Schleife wird immer wieder ausgeführt, solange die Bedingung innerhalb der () wahr bleibt. Da die Bedingung einfach als true aufgeführt ist, ist sie immer wahr, sodass die Schleife endlos ausgeführt wird. Um das Programm zu schließen, muss der Benutzer das Konsolenfenster manuell schließen. Andernfalls wartet das Programm immer auf neue Eingaben.
    • Das cin Schlüsselwort akzeptiert Eingaben vom Benutzer. Der Eingabedatenstrom ist intelligent genug, um eine im Konsolenfenster eingegebene Textzeile zu verarbeiten und in jeder der aufgelisteten Variablen in der Reihenfolge zu platzieren.
    • Der c.Calculate(x, oper, y); Ausdruck ruft die Calculate zuvor definierte Funktion auf und liefert die eingegebenen Eingabewerte und den angeforderten Vorgang. Die Funktion gibt dann eine Zahl zurück, die in result gespeichert wird.
    • Schließlich wird result auf die Konsole gedruckt und der Benutzer sieht das Ergebnis der Berechnung.

Erstellen und testen Sie den Code erneut.

Testen Sie nun das Programm erneut, um sicherzustellen, dass alles ordnungsgemäß funktioniert.

  1. Drücken Sie STRG+F5 , um die App neu zu erstellen und zu starten.

  2. Geben Sie 5+5 ein und drücken Sie Enter. Überprüfen Sie, ob das Ergebnis 10 ist.

    Screenshot eines Befehlsfensters mit den Ergebnissen der Ausführung des Programms.

    Die App gibt die Meldung aus: Geben Sie den auszuführenden Vorgang ein. Format: a+b | a-b | a*b | a/b. Der Benutzer hat 5+5 eingegeben. Ausgabe der App: Das Ergebnis von 5+5 ist: 10

  3. Beenden Sie das Programm, indem Sie das Konsolenfenster schließen.

Debuggen der App

Da der Benutzer im Konsolenfenster beliebige Eingaben machen kann, stellen Sie sicher, dass der Taschenrechner mit unerwarteten Eingaben umgehen kann. Anstatt das Programm auszuführen, debuggen Sie es, damit Sie sehen können, was sie schritt-für-Schritt ausführt.

Ausführen der App im Debugger

  1. Setzen Sie in CalcuatorTutorial.cpp einen Haltepunkt in der Zeile result = c.Calculate(x, oper, y);. Um den Haltepunkt festzulegen, wählen Sie neben der Linie in der vertikalen Leiste am linken Rand des Editorfensters aus, sodass ein roter Punkt angezeigt wird.

    Screenshot des Visual Studio-Editors. Ein roter Punkt, der einen Haltepunkt darstellt, wird in der Zeile angezeigt: ergebnis = c.Calculate(x, oper, y).

    Wenn Sie nun das Programm debuggen, wird die Ausführung an dieser Zeile angehalten. Sie haben bereits eine grobe Vorstellung davon, dass das Programm für einfache Fälle funktioniert. Da Sie die Ausführung nicht bei jedem Aufruf Calculate()anhalten möchten, müssen Sie den Haltepunkt bedingt machen.

  2. Klicken Sie mit der rechten Maustaste auf den roten Punkt, der den Haltepunkt darstellt, und wählen Sie "Bedingungen" aus. Geben Sie im Bearbeitungsfeld für die Bedingung die Zeichenfolge (y == 0) && (oper == '/')ein. Wählen Sie "Schließen" aus, um die Haltepunktbedingung zu speichern.

    Screenshot eines festgelegten Haltepunkts.

    Der Haltepunkt befindet sich in der Zeile: Ergebnis = c Punkt Berechnen ( x, Oper, y). 'Bedingungen...' Die Option "Bedingungen" ist aktiviert. Das Dropdownmenü "Bedingungen" ist auf "Bedingter Ausdruck" festgelegt. Das Bedingungsdropdown ist auf "ist wahr" festgelegt. Die Bedingung ist auf y == 0 && oper == '/' festgelegt.

    Jetzt wird die Ausführung am Haltepunkt angehalten, wenn die App versucht, durch 0 zu dividieren.

  3. Um das Programm zu debuggen, drücken Sie F5, oder wählen Sie die Symbolleistenschaltfläche für den lokalen Windows-Debugger mit dem grünen Pfeilsymbol aus. Wenn Sie in Ihrer Konsolen-App etwas wie 5 - 0 eingeben, verhält sich das Programm normal und wird weiterhin ausgeführt. Wenn Sie jedoch 10 /0 eingeben, wird sie am Haltepunkt angehalten. Sie können eine beliebige Anzahl von Leerzeichen zwischen dem Operator und Zahlen platzieren: cin Ist intelligent genug, um die Eingabe entsprechend zu analysieren.

    Screenshot von Visual Studio Editor mit angehaltener Programmausführung am bedingten Haltepunkt in der Zeile: result = c.Calculate(x, oper, y);.

Nützliche Fenster im Debugger

Beim Debuggen des Codes werden möglicherweise einige neue Fenster angezeigt. Diese Fenster können Das Debuggen unterstützen. Zeigen Sie das Fenster Auto an. Im Fenster "Autos " werden die aktuellen Werte der Variablen angezeigt, die mindestens drei Zeilen vor und bis zur aktuellen Zeile verwendet wurden. Wenn das Fenster "Autos" nicht angezeigt wird, wählen Sie im Hauptmenü "Windows>Autos> aus.

Screenshot des Fensters

Der Wert des Operators ist 47, Ergebnis ist 5, x ist 10, und y ist 0.

Um alle Variablen aus dieser Funktion anzuzeigen, wechseln Sie zum Fenster " Lokal" . Da diese Funktion klein ist, zeigen die Fenster "Autos" und "Locals" dieselben Variablen an. Sie können die Werte dieser Variablen im Fenster "Locals" beim Debuggen ändern, um zu sehen, welche Auswirkungen sie auf das Programm haben würden. In diesem Fall lassen Sie sie allein. Öffnen Sie das Fenster "Lokal", indem Sie unten im Fenster "Autos" die Option "Lokal" auswählen oder im Hauptmenü ">>" auswählen.

Screenshot des Fensters

Der Wert von oper ist 47 '/', Ergebnis ist 0, x ist 10, und y ist 0.

Sie können auch mit dem Mauszeiger auf Variablen im Code zeigen, um die aktuellen Werte an dem Punkt anzuzeigen, an dem die Ausführung derzeit angehalten ist. Stellen Sie sicher, dass sich das Editorfenster im Fokus befindet, indem Sie es zuerst auswählen.

Screenshot eines Tooltips, der den Wert der Variablen

Debuggen fortsetzen

  1. Der gelbe Pfeil auf der linken Seite zeigt den aktuellen Ausführungspunkt an. Die aktuelle Zeile ruft die Funktion Calculate auf. Drücken Sie also F11, um Schrittweise in die Funktion einzutreten. Jetzt führen Sie Code im Textkörper der Calculate Funktion aus. Seien Sie vorsichtig mit Step Into, da es in alle Funktionen in der Zeile, auf der Sie sich befinden, einschließlich der Standardbibliotheksfunktionen, hineintritt. Es ist in Ordnung, in die Standardbibliothek einzusteigen, aber Möglicherweise möchten Sie sich eher auf Ihren Code anstatt auf Bibliothekscode konzentrieren.

  2. Nachdem sich der Ausführungspunkt am Anfang der Calculate Funktion befindet, drücken Sie F10 , um zur nächsten Zeile in der Ausführung des Programms zu wechseln. F10 wird auch als Step Over bezeichnet. Sie können Schritt-Over verwenden, um von Zeile zu Zeile zu wechseln, ohne sich in die Details des Vorkommens in jedem Teil der Zeile einzutauchen. Im Allgemeinen sollten Sie "Step Over" anstelle von "Step Into " verwenden, es sei denn, Sie möchten tiefer in Code eintauchen, der von anderen Orten aufgerufen wird, wie Sie den Textkörper Calculateerreicht haben.

  3. Fahren Sie mit F10 fort, um jede Zeile zu durchlaufen , bis Sie wieder zur Funktion in der main() anderen Datei gelangen, und beenden Sie die cout Zeile.

    Das Programm tut das, was Sie erwarten: Es nimmt die erste Zahl und dividiert sie durch die zweite. Zeigen Sie in der cout Zeile auf die result Variable, oder sehen Sie sich im Fenster result einen Blick an. Der Wert ist inf, der nicht richtig aussieht.

    Screenshot des Debuggens des Rechners.

    Die aktuelle Anweisung im Debugger ist << "Result is: " << result < endl <; Im Fenster "Autos" ist das Ergebnis "inf".

    Sie können dies beheben. Die Zeile cout gibt den in result gespeicherten Wert aus. Wenn Sie eine weitere Zeile mit F10 vorwärts durchlaufen, wird im Konsolenfenster Folgendes angezeigt:

    Screenshot der Visual Studio-Debugkonsole mit dem Ergebnis einer Division durch Null-Vorgang.

    Die App zeigt an: Geben Sie den auszuführenden Vorgang ein. Format: a+b | a-b | a*b | a/b. Der Benutzer hat 5-0 eingegeben. Die App-Ausgabe: Ergebnis: 5. Der Benutzer hat 10/0 eingegeben. Die App-Ausgabe: Das Ergebnis ist: inf

    Dieses Ergebnis liegt daran, dass die Division durch Null nicht definiert ist, sodass das Programm keine numerische Antwort für den angeforderten Vorgang hat.

Beheben des Fehlers „Division durch Null“

Sie können die Division durch null eleganter abfangen, sodass der Benutzer das Problem besser verstehen kann.

  1. Nehmen Sie die folgenden Änderungen in CalculatorTutorial.cpp. Sie können das Programm während der Bearbeitung ausführen lassen, dank eines Debuggerfeatures namens "Bearbeiten" und "Weiter". Fügen Sie eine if folgende cin >> x >> oper >> y; Anweisung hinzu, um die Division durch Null zu überprüfen, und geben Sie eine Nachricht an den Benutzer aus, wenn dies geschieht. Andernfalls wird das Ergebnis gedruckt.

    // 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. Drücken Sie einmal F5 . Die Programmausführung wird fortgesetzt, bis sie angehalten werden muss, um Benutzereingaben zu bitten. Geben Sie erneut ein 10 / 0 . Jetzt wird eine hilfreichere Nachricht gedruckt. Der Benutzer wird um mehr Eingabe gebeten, und das Programm wird weiterhin normal ausgeführt.

    Screenshot eines Konsolenfensters mit der endgültigen Ausgabe nach der Implementierung von Änderungen zur Verarbeitung der Division durch Null.

    Das Konsolenfenster zeigt zwei Zeilen an: 10 / 0 Ergebnis ist: inf, gefolgt von, 10 / 0 Mathematischer Fehler: Versucht, durch Null zu dividieren.

    Hinweis

    Wenn Sie Code im Debugmodus bearbeiten, besteht das Risiko, dass Code veraltet wird. Dies geschieht, wenn der Debugger weiterhin Ihren alten Code ausführt und ihn noch nicht mit Ihren Änderungen aktualisiert hat. Der Debugger zeigt ein Dialogfeld an, in dem Sie darüber informiert werden, wann dies geschieht. Manchmal müssen Sie F5 drücken, um den ausgeführten Code zu aktualisieren.

    Wenn Sie insbesondere innerhalb einer Funktion eine Änderung vornehmen, während sich der Ausführungspunkt innerhalb dieser Funktion befindet, müssen Sie die Funktion aussteigen und dann wieder in die Funktion zurückkehren, um den aktualisierten Code abzurufen. Wenn dies nicht funktioniert und eine Fehlermeldung angezeigt wird, wählen Sie das rote Quadrat aus, um das Debuggen zu beenden, und starten Sie das Debuggen erneut, indem Sie F5 drücken oder den grünen Wiedergabepfeil neben der Stoppschaltfläche auf der Symbolleiste auswählen.

    Ein weiterer Grund, warum "Bearbeiten und Fortfahren" möglicherweise fehlschlägt, ist, wenn Sie eine Meldung sehen, die besagt, dass "Die Quelle-Dateien genau mit der ursprünglichen Version übereinstimmen müssen", und dass diese Einstellung unter Debug-Optionen-Allgemein aktiviert sein sollte. Um dies zu beheben, wählen Sie im Hauptmenü >>Optionen>Debuggen>Allgemein und stellen Sie sicher, dass > aktiviert ist.

    Grundlegendes zu den Verknüpfungen "Ausführen" und "Debuggen"

    • F5 oder Debuggen>starten Sie das Debuggen, startet eine Debugsitzung, wenn eine noch nicht aktiv ist, und führt das Programm aus, bis ein Haltepunkt erreicht wird oder das Programm Benutzereingaben benötigt. Wenn keine Benutzereingabe erforderlich ist und kein Haltepunkt zum Drücken verfügbar ist, wird das Programm beendet, und das Konsolenfenster wird geschlossen, wenn die Ausführung des Programms abgeschlossen ist. Wenn das Programm in die Konsole ausgibt, verwenden Sie STRG+F5 , oder legen Sie einen Haltepunkt fest, bevor Sie F5 drücken, um das Fenster geöffnet zu halten.
    • STRG+F5, oder Debuggen>Ohne Debugging starten, startet die Anwendung, ohne in den Debugmodus zu gehen. Dies ist etwas schneller als das Debuggen, und das Konsolenfenster bleibt geöffnet, nachdem das Programm die Ausführung abgeschlossen hat.
    • Mit F10, der als "Step Over" bezeichnet wird, können Sie Code, Zeile für Zeile durchlaufen und visualisieren, wie der Code ausgeführt wird und welche Variablenwerte bei jedem Ausführungsschritt vorliegen.
    • F11, bekannt als "Schritt in", funktioniert ähnlich wie "Step Over", mit der Ausnahme, dass er in allen Funktionen ausgeführt wird, die in der Ausführungszeile aufgerufen werden. Wenn beispielsweise die ausgeführte Zeile eine Funktion aufruft, verschiebt das Drücken von F11 den Mauszeiger in den Textkörper der Funktion, sodass Sie dem Code der Funktion folgen können, der ausgeführt wird, bevor Sie zur Zeile zurückkehren, an der Sie begonnen haben. Drücken von F10-Schritten über den Funktionsaufruf und wechselt einfach zur nächsten Zeile. Der Funktionsaufruf geschieht weiterhin, aber das Programm hält nicht an, um Ihnen zu zeigen, was sie tut.

Schließen der App

  • Wenn die Rechner-App noch läuft, schließen Sie das Konsolenfenster, um sie zu stoppen.

Git-Quellcodeverwaltung hinzufügen

Nachdem Sie eine App erstellt haben, möchten Sie sie möglicherweise einem Git-Repository hinzufügen. Wir haben für Sie gesorgt. Visual Studio erleichtert diesen Prozess mit Git-Tools, die Sie direkt über die IDE verwenden können.

Tipp

Git ist das am häufigsten verwendete moderne Versionssteuerungssystem. Ganz gleich, ob Sie professioneller Entwickler sind oder gerade lernen zu programmieren, Git kann nützlich sein. Wenn Sie noch nicht mit Git arbeiten, ist die Git-Website ein guter Ausgangspunkt. Dort finden Sie Spickzettel, ein beliebtes Online-Buch und Git Basics-Videos.

Um Ihren Code git zuzuordnen, erstellen Sie zunächst ein neues Git-Repository, in dem sich Ihr Code befindet.

  1. Wählen Sie in der Statusleiste in der unteren rechten Ecke von Visual Studio " Zur Quellcodeverwaltung hinzufügen" und dann Git aus.

    Screenshot der Git-Quellcodeverwaltungsschaltflächen unter dem Bereich des Projektmappen-Explorers, wobei die Schaltfläche

  2. Melden Sie sich im Dialogfeld "Git-Repository erstellen" bei GitHub an.

    Screenshot des Dialogfelds

    Der Repositoryname wird basierend auf Ihrem Ordnerspeicherort automatisch aufgefüllt. Standardmäßig ist Ihr neues Repository privat, was bedeutet, dass Sie die einzige Person sind, die darauf zugreifen kann.

    Tipp

    Unabhängig davon, ob Ihr Repository öffentlich oder privat ist, empfiehlt es sich, eine Remotesicherung Ihres Codes sicher auf GitHub zu speichern. Auch wenn Sie nicht mit einem Team arbeiten, stellt ein Remote-Repository Ihren Code von jedem Computer aus zur Verfügung.

  3. Wählen Sie Erstellen und pushen aus.

    Nachdem Sie Ihr Repository erstellt haben, werden Statusdetails in der Statusleiste angezeigt.

    Screenshot der Statusleiste des Repositories unterhalb des Bereichs

    Das erste Symbol mit den Pfeilen zeigt, wie viele ausgehende/eingehende Commits sich in Ihrer aktuellen Verzweigung befinden. Sie können dieses Symbol verwenden, um alle eingehenden Commits abzurufen oder ausgehende Commits zu übertragen. Sie können auch wählen, sich diese Commits zuerst anzeigen zu lassen. Wählen Sie dazu das Symbol aus, und wählen Sie dann " Ausgehende/eingehende Ansicht" aus.

    Das zweite Symbol mit dem Bleistift zeigt die Anzahl der nicht übernommenen Änderungen an Ihrem Code an. Sie können dieses Symbol auswählen, um diese Änderungen im Fenster Git Changes anzuzeigen.

Weitere Informationen zur Verwendung von Git mit Ihrer App finden Sie in der Visual Studio-Versionssteuerungsdokumentation.

Die fertige App

Glückwunsch! Sie haben den Code für die Rechner-App abgeschlossen, erstellt und gedebuggt und zu einem Repository hinzugefügt, alles in Visual Studio.

Nächster Schritt

Weitere Informationen zu Visual Studio für C++

Der übliche Ausgangspunkt für einen C++-Programmierer ist eine Anwendung "Hello, world!", die auf der Befehlszeile ausgeführt wird. Sie beginnen mit dieser App in diesem Artikel und wechseln dann zu einer schwierigeren Aufgabe: einer Rechner-App.

Voraussetzungen

Erstellen Ihres App-Projekts

Visual Studio verwendet Projekte zum Organisieren des Codes für eine App und Lösungen zum Organisieren eines oder mehrerer Projekte. Ein Projekt enthält die Optionen, Konfigurationen und Regeln, die zum Erstellen einer App verwendet werden. Außerdem wird die Beziehung zwischen den Dateien des Projekts und allen externen Dateien verwaltet. Um Ihre App zu erstellen, erstellen Sie zuerst ein neues Projekt und eine neue Lösung.

  1. Wählen Sie im Menü von Visual Studio Datei>Neu>Projekt aus. Das Fenster "Neues Projekt" wird geöffnet.

  2. Stellen Sie auf der linken Randleiste sicher, dass Visual C++ ausgewählt ist. Wählen Sie in der Mitte die Konsolen-App aus.

  3. Geben Sie im Feld "Name " unten den Namen des neuen Projekts "CalculatorTutorial" ein, und wählen Sie dann "OK" aus.

    Screenshot des Dialogfelds

    Links ist "Andere Sprachen" > Visual C++ ausgewählt. In der Mitte ist der Konsolen-App-Projekttyp ausgewählt. Das Textfeld "Name" enthält "CalculatorTutorial".

    Eine leere C++-Windows Konsolenanwendung "Hallo Welt"-App wird erstellt. Konsolenanwendungen verwenden ein Windows-Konsolenfenster, um die Ausgabe anzuzeigen und Benutzereingaben zu akzeptieren. In Visual Studio wird ein Editorfenster geöffnet und zeigt den generierten Code an:

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

Überprüfen, ob Ihre neue App erstellt und ausgeführt wird

Die Vorlage für eine neue Windows-Konsolenanwendung erstellt eine einfache C++-App "Hallo Welt". An diesem Punkt können Sie sehen, wie Visual Studio die von Ihnen erstellten Apps direkt aus der IDE erstellt und ausführt.

  1. Um Ihr Projekt zu erstellen, wählen Sie im Menü Erstellen die Option Projektmappe erstellen aus. Das Ausgabefenster zeigt die Ergebnisse des Buildprozesses an.

    Screenshot des Visual Studio-Ausgabefensters, das zeigt, dass der Build erfolgreich war.

  2. Um den Code auszuführen, wählen Sie auf der Menüleiste "Debuggen" aus, "Starten" ohne Debugging (STRG+F5).

    Screenshot der Visual Studio-Debugkonsole mit der Ausgabe : Hallo Welt!

    Ein Konsolenfenster wird geöffnet, und Ihre App wird darin ausgeführt.

    Wenn Sie eine Konsolen-App in Visual Studio starten, wird Ihr Code ausgeführt und Press any key to close this window . . . angezeigt, damit Sie die Ausgabe sehen können.

    Glückwunsch! Sie haben Ihre erste Konsolen-App "Hello, world!" in Visual Studio erstellt!

  3. Drücken Sie eine Taste, um das Konsolenfenster zu schließen und zu Visual Studio zurückzukehren.

Sie verfügen jetzt über die Tools zum Erstellen und Ausführen Ihrer App nach jeder Änderung, um sicherzustellen, dass der Code weiterhin wie erwartet funktioniert. Später lernen Sie, wie Sie es debuggen, falls es nicht funktioniert.

Bearbeiten des Codes

Ändern Sie nun den Code in dieser Vorlage in eine Taschenrechner-App um.

  1. Ersetzen Sie den Inhalt der CalculatorTutorial.cpp Datei durch den folgenden Code, damit er diesem Beispiel entspricht:

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

    Grundlegendes zum Code:

    • Die #include Anweisung importiert Code aus anderen Dateien. Manchmal sehen Sie einen Dateinamen, der von spitzen Klammern wie <iostream> umgeben ist. Die winkeligen Klammern weisen den Compiler an, zuerst in den Standardsystemverzeichnissen nach der iostream Headerdatei zu suchen, und wenn nicht gefunden, in Verzeichnissen zu suchen, die für das Projekt spezifisch sind. Manchmal sehen Sie möglicherweise einen Dateinamen in Anführungszeichen wie "someHeader.h". Die Anführungszeichen weisen den Compiler an, die Suche in den Standardsystemverzeichnissen zu überspringen und stattdessen nur in Verzeichnissen zu suchen, die für das Projekt spezifisch sind.
    • Der using namespace std; teilt dem Compiler mit, dass Code aus der C++-Standardbibliothek in dieser Datei verwendet werden soll. Ohne diese Zeile müsste jedem Schlüsselwort aus der Bibliothek vorangestellt std:: werden, um den Bereich zu kennzeichnen. Ohne diese Zeile würde beispielsweise jeder Bezug auf cout als std::cout geschrieben werden. Die using Anweisung wird hinzugefügt, um den Zugriff auf Code in einem anderen Namespace zu erleichtern.
    • Das cout Schlüsselwort wird in C++ in die Standardausgabe gedruckt. Der << Operator weist den Compiler an, alles, was rechts davon ist, an die Standardausgabe zu senden.
    • Das endl Schlüsselwort entspricht der EINGABETASTE. Sie beendet die Linie und verschiebt den Cursor zur nächsten Zeile. Es ist eine bessere Praxis, ein \n innerhalb der Zeichenkette (eingeschlossen von "") zu platzieren, um dasselbe zu erreichen, weil endl den Puffer immer leert und die Leistung des Programms beeinträchtigen kann. Da dies jedoch eine sehr kleine App ist, endl wird stattdessen verwendet.
    • Alle C++-Anweisungen müssen mit Semikolons enden, und alle C++-Anwendungen müssen eine main() Funktion enthalten. Diese Funktion ist das, was das Programm am Anfang ausführt. Der gesamte Code muss von main() aus zugänglich sein, damit er verwendet werden kann.
  2. Um die Datei zu speichern, drücken Sie STRG+S, oder wählen Sie auf der Symbolleiste unter der Menüleiste das Diskettensymbol aus.

  3. Um die Anwendung auszuführen, drücken Sie STRG+F5 , oder wechseln Sie zum Menü "Debuggen ", und wählen Sie "Ohne Debuggen starten" aus. Wenn ein Dialogfeld mit der Meldung Dieses Projekt ist nicht mehr aktuell angezeigt wird, können Sie Dieses Dialogfeld nicht mehr anzeigen und dann Ja auswählen, um Ihre Anwendung zu erstellen. Es sollte ein Konsolenfenster angezeigt werden, das wie folgt aussieht:

    Screenshot der Rechner-App, die in einem Konsolenfenster ausgeführt wird.

    Die Konsolen-App zeigt die Ausgabe an. Dies ist: Rechnerkonsolenanwendung. Geben Sie den auszuführenden Vorgang ein. Format: a+b | a-b | a*b | a/b. Der Vorgang wurde mit Code 0 beendet, und es wird eine Meldung angezeigt, dass die Konsole beim Beenden des Debuggens automatisch geschlossen werden soll, aktivieren Sie Tools > Optionen > Debuggen > Die Konsole automatisch schließen, wenn das Debuggen beendet wird. Schließlich gibt es eine Meldung, um eine beliebige Taste zu drücken, um dieses Fenster zu schließen.

  4. Schließen Sie das Konsolenfenster, wenn Sie fertig sind.

Hinzufügen von Code zum Ausführen einiger Mathematischer Berechnungen

Eine Klasse ist wie eine Blaupause für ein Objekt, das etwas tut. Definieren Sie in diesem Fall eine Rechnerklasse, die die mathematische Logik enthält.

Hinzufügen einer Rechnerklasse

  1. Wechseln Sie zum Menü "Projekt ", und wählen Sie "Klasse hinzufügen" aus. Geben Sie im Bearbeitungsfeld KlassennameRechner ein. Wählen Sie OK aus.

    Screenshot des Dialogfelds

    Das Feld "Klassenname" enthält den Textrechner. Das H-Dateifeld enthält "Calculator.h". Das .cpp Dateifeld enthält Calculator.cpp. Das Basisklassenfeld ist leer. Die Optionen für "Inline" und "Verwaltet" sind deaktiviert.

    Eine Klasse ist wie eine Blaupause für ein Objekt, das etwas tut. In diesem Fall definiert es einen Rechner und wie er funktionieren soll.

    Ihrem Projekt werden zwei neue Dateien hinzugefügt. Um alle geänderten Dateien gleichzeitig zu speichern, drücken Sie STRG+UMSCHALT+S. Es ist eine Tastenkombination für "Datei>Alle speichern". Es gibt auch eine Symbolleistenschaltfläche für "Alle speichern", ein Symbol von zwei Disketten, die neben der Schaltfläche " Speichern " zu finden sind. Im Allgemeinen empfiehlt es sich, " Alle speichern" häufig zu erledigen, sodass Beim Speichern keine Dateien fehlen.

    Das Dialogfeld "Klasse hinzufügen " erstellt .h und .cpp Dateien mit demselben Namen wie die Klasse. Im Projektmappen-Explorer-Fenster können Sie eine vollständige Liste Ihrer Projektdateien sehen, die am Rand der IDE sichtbar ist. Wenn der Projektmappen-Explorer nicht angezeigt wird, öffnen Sie ihn in der Menüleiste: Wählen Sie "Projektmappen-Explorer> aus.

    Screenshot des Visual Studio-Projektmappen-Explorer-Fensters.

    Das Rechner-Tutorial-Projekt hat einen Knoten für Header-Dateien mit "Calculator.h", "stdafx.h" und "targetver.h". Ein Knoten "Quelldateien" enthält Calculator.cpp, CalculatorTutorial.cpp und stdafx.cpp. Knoten für Verweise, externe Abhängigkeiten und Ressourcendateien sind sichtbar, aber geschlossen.

    Sie können eine Datei öffnen, indem Sie im Projektmappen-Explorer-Fenster darauf doppelklicken. Zum Öffnen Calculator.hdoppelklicken Sie darauf.

  2. Ersetzen Sie den Inhalt des Calculator.h folgenden Codes so, dass die Datei jetzt wie folgt aussieht:

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

    Grundlegendes zum Code

    • Dieser Code deklariert eine neue Funktion, die mathematische CalculateVorgänge für Addition, Subtraktion, Multiplikation und Division behandelt.
    • C++-Code ist in Headerdateien () und .h (.cpp) angeordnet. Einige andere Dateierweiterungen werden von verschiedenen Compilern unterstützt, aber dies sind die wichtigsten, die Sie kennen sollten. Funktionen und Variablen werden normalerweise deklariert, das heißt, dass sie einen Namen und einen Typ in Header-Dateien bekommen, und implementiert oder in Quell-Dateien definiert werden. Um auf code zuzugreifen, der in einer anderen Datei definiert ist, können Sie verwenden #include "filename.h", wobei filename.h der Name der Datei ist, die die Variablen oder Funktionen deklariert, die Sie verwenden möchten.
    • Es empfiehlt sich, Ihren Code basierend auf ihrer Funktionsweise in verschiedene Dateien zu organisieren, sodass sie den code, den Sie später benötigen, ganz einfach finden. In diesem Fall definieren Sie die Calculator Klasse getrennt von der Datei, die die main() Funktion enthält, aber Sie verweisen auf die Calculator Klasse in main().
  3. Eine grüne Wellenlinie erscheint unter Calculate, da die Calculate Funktion zwar deklariert wird, sie aber nicht definiert ist. Bewegen Sie den Mauszeiger auf Calculate, wählen Sie den Abwärtspfeil auf der Glühbirne aus, und wählen Sie "Definition von 'Calculate' in Calculator.cpp erstellen". Ein Popup wird angezeigt, mit dem Sie einen Überblick über die Codeänderung erhalten, die in der anderen Datei vorgenommen wurde. Der Code wurde zu Calculator.cpp hinzugefügt.

    Video mit der Dropdownliste

    Derzeit wird nur 0,0 zurückgegeben. Das ändern wir jetzt. Drücken Sie ESC , um das Popup zu schließen, und wählen Sie "Ja " aus, um die Änderungen zu speichern.

  4. Wechseln Sie im Editorfenster zur Calculator.cpp Datei. Ersetzen Sie den Inhalt der Datei durch den folgenden 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;
        }
    }
    

    Grundlegendes zum Code

    • Die Funktion Calculate verwendet eine Zahl, einen Operator und eine zweite Zahl. Anschließend führt sie den angeforderten Vorgang für die beiden Nummern aus.
    • Die switch Anweisung überprüft, welcher Operator bereitgestellt wurde, und führt den Fall aus, der diesem Vorgang entspricht. Der default: Fall ist ein Fallback, falls der Benutzer einen Operator eingibt, der von keiner der vorherigen case Anweisungen behandelt wird. Es empfiehlt sich, ungültige Benutzereingaben eleganter zu behandeln, dies liegt jedoch außerhalb des Umfangs dieses Lernprogramms.
    • Das double Schlüsselwort zeigt einen Zahlentyp an, der Dezimalstellen unterstützt. Dieser Zahlentyp wird als Gleitkommazahl bezeichnet und double bedeutet eine Gleitkommazahl mit zusätzlicher Genauigkeit. Auf diese Weise kann der Rechner sowohl Dezimalmathematik als auch Ganzzahlmathematik verarbeiten. Die Calculate Funktion ist erforderlich, um immer eine Gleitkommazahl mit doppelter Genauigkeit aufgrund des double Codeanfangs zurückzugeben (dies bezeichnet den Rückgabetyp der Funktion), weshalb das Programm 0,0 im Standardfall zurückgibt.
    • Die .h Datei deklariert den Funktionsprototyp, der dem Compiler vorab angibt, welche Parameter erforderlich sind, und welche Rückgabetyp davon erwartet werden soll. Die .cpp Datei enthält alle Implementierungsdetails der Funktion.

Wenn Sie den Code zu diesem Zeitpunkt erstellen und erneut ausführen, wird er nach der Aufforderung, welche Operation ausgeführt werden soll, noch beendet. Ändern Sie als Nächstes die main Funktion, um einige Berechnungen durchzuführen.

Aufrufen der Memberfunktionen der Rechnerklasse

  1. Aktualisieren Sie die Funktion in main wie folgt:

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

    Grundlegendes zum Code

    • Da C++-Programme immer an der main() Funktion beginnen, müssen Sie unseren anderen Code von dort aufrufen, daher ist eine #include Anweisung erforderlich, um diesen Code für unsere main() Funktion sichtbar zu machen.
    • Die Variablen x, y, , operund result werden deklariert, um die erste Zahl, die zweite Zahl, den Operator bzw. das Endergebnis zu speichern. Es empfiehlt sich immer, ihnen einige anfängliche Werte zu geben, um nicht definierte Verhaltensweisen zu vermeiden, was hier getan wird.
    • Die Zeile Calculator c; deklariert ein Objekt namens c als eine Instanz der Klasse Calculator. Die Klasse selbst ist nur eine Blaupause für die Funktionsweise von Rechnern; das Objekt ist der spezifische Rechner, der die Mathematik ausführt.
    • Die while (true)-Anweisung ist eine Schleife. Der Code innerhalb der Schleife wird immer wieder ausgeführt, solange die Bedingung innerhalb von () erfüllt ist. Da die Bedingung einfach als true aufgeführt ist, ist sie immer wahr, sodass die Schleife endlos ausgeführt wird. Um das Programm zu schließen, muss der Benutzer das Konsolenfenster manuell schließen. Andernfalls wartet das Programm immer auf neue Eingaben.
    • Das cin Schlüsselwort akzeptiert Eingaben vom Benutzer. Der Eingabedatenstrom ist intelligent genug, um eine im Konsolenfenster eingegebene Textzeile zu verarbeiten und in jeder der aufgelisteten Variablen in der Reihenfolge zu platzieren.
    • Der c.Calculate(x, oper, y); Ausdruck ruft die Calculate zuvor definierte Funktion auf und liefert die eingegebenen Eingabewerte und den angeforderten Vorgang. Die Funktion gibt dann eine Zahl zurück, die in result gespeichert wird.
    • Schließlich wird result auf die Konsole gedruckt und der Benutzer sieht das Ergebnis der Berechnung.

Erstellen und testen Sie den Code erneut.

Testen Sie das Programm erneut, um sicherzustellen, dass alles ordnungsgemäß funktioniert.

  1. Drücken Sie STRG+F5 , um die App neu zu erstellen und zu starten.

  2. Geben Sie 5+5 ein und drücken Sie Enter. Überprüfen Sie, ob das Ergebnis 10 ist.

    Screenshot eines Befehlsfensters, in dem die Rechner-App ausgeführt wird und zeigt, dass das Ergebnis von 5 + 5 10 ist.

  3. Beenden Sie das Programm, indem Sie das Konsolenfenster schließen.

Debuggen der App

Da der Benutzer im Konsolenfenster beliebige Eingaben machen kann, stellen Sie sicher, dass der Taschenrechner mit unerwarteten Eingaben umgehen kann. Anstatt das Programm auszuführen, debuggen Sie es, sodass Sie sehen können, was sie schritt-für-Schritt ausführt.

Ausführen der App im Debugger

  1. Legen Sie in CalcuatorTutorial.cpp einen Haltepunkt auf der result = c.Calculate(x, oper, y); Zeile fest. Um den Haltepunkt festzulegen, wählen Sie neben der Linie in der grauen vertikalen Leiste am linken Rand des Editorfensters aus, sodass ein roter Punkt angezeigt wird.

    Screenshot des Benutzers, der einen Haltepunkt in Zeile 23 festlegt: Ergebnis = c.Calculate(x, Oper, y);.

    Wenn Sie nun das Programm debuggen, wird die Ausführung immer in dieser Zeile angehalten. Sie haben bereits eine grobe Vorstellung davon, dass das Programm für einfache Fälle funktioniert. Da Sie die Ausführung nicht jedes Mal anhalten möchten, müssen Sie den Haltepunkt bedingt machen.

  2. Klicken Sie mit der rechten Maustaste auf den roten Punkt, der den Haltepunkt darstellt, und wählen Sie "Bedingungen" aus. Geben Sie im Bearbeitungsfeld für die Bedingung die Zeichenfolge (y == 0) && (oper == '/')ein. Wählen Sie die Schaltfläche " Schließen ", wenn Sie fertig sind, um die Haltepunktbedingung zu speichern.

    Screenshot des Fensters des bedingten Haltepunkts.

    Der Haltepunkt befindet sich in der Zeile: Ergebnis = c Punkt Berechnen ( x, Oper, y). 'Bedingungen...' Die Option "Bedingungen" ist aktiviert. Das Dropdownmenü "Bedingungen" ist auf "Bedingter Ausdruck" festgelegt. Das Bedingungsdropdown ist auf "ist wahr" festgelegt. Die Bedingung ist auf y == 0 && oper == '/' festgelegt.

    Die Ausführung pausiert am Haltepunkt, wenn eine Division durch 0 versucht wird.

  3. Um das Programm zu debuggen, drücken Sie F5, oder wählen Sie die Symbolleistenschaltfläche " Lokaler Windows-Debugger " mit dem grünen Pfeilsymbol aus. Wenn Sie in Ihrer Konsolen-App etwas wie 5 - 0 eingeben, verhält sich das Programm normal und wird weiterhin ausgeführt. Wenn Sie jedoch 10 /0 eingeben, wird sie am Haltepunkt angehalten. Sie können sogar eine beliebige Anzahl von Leerzeichen zwischen Dem Operator und Zahlen platzieren; cin ist intelligent genug, um die Eingabe entsprechend zu analysieren.

    Screenshot der Programmausführung, die am bedingten Haltepunkt angehalten wurde.

    Der Benutzer gibt 5 - 0 ein. Die App gibt aus: Das Ergebnis ist 5. Der Benutzer gibt dann 10/0 ein, und da die Bedingung für den bedingten Haltepunkt erfüllt ist, stoppt die Ausführung in der Zeile: Ergebnis = c.Calculate(x, Oper, y);

Nützliche Fenster im Debugger

Beim Debuggen des Codes werden möglicherweise einige neue Fenster angezeigt. Diese Fenster können Das Debuggen unterstützen. Sehen Sie sich das Fenster "Autos " an. Im Fenster "Autos " werden die aktuellen Werte der Variablen angezeigt, die mindestens drei Zeilen vor und bis zur aktuellen Zeile verwendet wurden. Wenn das Fenster "Autos" nicht angezeigt wird, wählen Sie im Hauptmenü "Debuggen>Windows>Autos" aus.

Screenshot des Fensters

Der Wert des Operators ist 47, Ergebnis ist 5, x ist 10, und y ist 0.

Um alle Variablen aus dieser Funktion anzuzeigen, wechseln Sie zum Fenster " Lokal" . Da diese Funktion klein ist, werden im Fenster "Autos" und "Locals" dieselben Variablen angezeigt. Sie können die Werte dieser Variablen beim Debuggen jedoch ändern, um zu sehen, welche Auswirkungen sie auf das Programm haben würden. In diesem Fall lassen Sie sie allein. Öffnen Sie das Fenster "Lokal", indem Sie unten im Fenster "Autos" die Option "Lokal" auswählen oder im Hauptmenü ">>" auswählen.

Screenshot des Fensters

Der Wert von oper ist 47 '/', Ergebnis ist 0, x ist 10, und y ist 0.

Sie können auch mit dem Mauszeiger auf Variablen im Code selbst zeigen, um die aktuellen Werte anzuzeigen, in denen die Ausführung derzeit angehalten ist. Wählen Sie zuerst das Editorfenster aus, um sicherzustellen, dass es sich im Fokus befindet.

Screenshot mit einer QuickInfo, die beim Bewegen des Mauszeigers über die Variable y angezeigt wird und den aktuellen Wert von y anzeigt, der 0 ist.

Debuggen fortsetzen

  1. Der gelbe Pfeil auf der linken Seite zeigt den aktuellen Ausführungspunkt an. Die aktuelle Zeile ruft auf Calculate. Drücken Sie also F11 , um in die Funktion einzusteigen , wodurch Sie in den Textkörper der Calculate Funktion gelangen. Seien Sie vorsichtig mit Step Into, da es in alle Funktionen in der Zeile, auf der Sie sich befinden, einschließlich der Standardbibliotheksfunktionen, hineintritt. Es ist in Ordnung, in die Standardbibliothek einzusteigen, aber Möglicherweise möchten Sie sich eher auf Ihren Code anstatt auf Bibliothekscode konzentrieren.

  2. Nachdem sich der Ausführungspunkt am Anfang der Calculate Funktion befindet, drücken Sie F10 , um zur nächsten Zeile in der Ausführung des Programms zu wechseln. F10 wird auch als Step Over bezeichnet. Sie können Schritt-Over verwenden, um von Zeile zu Zeile zu wechseln, ohne sich in die Details des Vorkommens in jedem Teil der Zeile einzutauchen. Im Allgemeinen sollten Sie "Step Over" anstelle von "Step Into" verwenden, es sei denn, Sie möchten tiefer in Code eintauchen, der von anderen Orten aufgerufen wird (wie Sie es getan haben, um den Textkörper Calculatezu erreichen).

  3. Fahren Sie mit F10 fort, um jede Zeile zu durchlaufen , bis Sie wieder zur Funktion in der main() anderen Datei gelangen, und beenden Sie die cout Zeile.

    Das Programm tut das, was Sie erwarten: Es nimmt die erste Zahl und dividiert sie durch die zweite. Zeigen Sie in der cout Zeile auf die result Variable, oder sehen Sie sich im Fenster result einen Blick an. Der Wert ist inf, der nicht richtig aussieht.

    Screenshot des Debuggens des Rechners.

    Die aktuelle Anweisung im Debugger ist << "Result is: " << result < endl <; Im Fenster "Autos" ist das Ergebnis "inf".

    Sie können dies beheben. Die cout Zeile gibt den Wert aus, der in result gespeichert ist. Wenn Sie also eine weitere Zeile mit F10 vorwärts gehen, zeigt das Konsolenfenster:

    Screenshot der Visual Studio-Debugkonsole mit dem Ergebnis einer Division durch Null-Vorgang.

    Die App zeigt an: Geben Sie den auszuführenden Vorgang ein. Format: a+b | a-b | a*b | a/b. Der Benutzer hat 5-0 eingegeben. Die App-Ausgabe: Ergebnis: 5. Der Benutzer hat 10/0 eingegeben. Die App-Ausgabe: Das Ergebnis ist: inf

    Dieses Ergebnis liegt daran, dass die Division durch Null nicht definiert ist, sodass das Programm keine numerische Antwort für den angeforderten Vorgang hat.

Beheben des Fehlers „Division durch Null“

Behandeln Sie die Division durch Null eleganter, damit der Benutzer das Problem leichter verstehen kann.

  1. Nehmen Sie die folgenden Änderungen in CalculatorTutorial.cpp. Sie können das Programm während der Bearbeitung ausführen lassen, dank eines Debuggerfeatures namens "Bearbeiten" und "Weiter". Die Änderung besteht darin, eine if folgende cin >> x >> oper >> y; Anweisung hinzuzufügen, um die Division durch Null zu überprüfen und eine Nachricht an den Benutzer auszugeben, wenn dies geschieht. Andernfalls wird das Ergebnis gedruckt:

    // 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. Drücken Sie einmal F5 . Die Programmausführung wird fortgesetzt, bis sie angehalten werden muss, um Benutzereingaben zu bitten. Geben Sie erneut ein 10 / 0 . Jetzt wird eine hilfreichere Nachricht gedruckt. Der Benutzer wird um mehr Eingabe gebeten, und das Programm wird weiterhin normal ausgeführt.

    Video der Debugkonsole mit dem Endergebnis nach Codeänderungen. 10 /0 wird eingegeben, und das Programm zeigt

    Hinweis

    Wenn Sie Code im Debugmodus bearbeiten, besteht das Risiko, dass Code veraltet wird. Dies geschieht, wenn der Debugger weiterhin Ihren alten Code ausführt und ihn noch nicht mit Ihren Änderungen aktualisiert hat. Der Debugger stellt ein Dialogfeld bereit, das Sie darüber informiert, wann dies geschieht. Manchmal müssen Sie F5 drücken, um den ausgeführten Code zu aktualisieren.

    Wenn Sie eine Änderung innerhalb einer Funktion vornehmen, während sich der Ausführungspunkt innerhalb dieser Funktion befindet, treten Sie aus der Funktion heraus, und kehren Sie dann erneut in die Funktion ein, um den aktualisierten Code abzurufen. Wenn dies aus irgendeinem Grund nicht funktioniert und eine Fehlermeldung angezeigt wird, wählen Sie das rote Quadrat aus, um das Debuggen zu beenden, und beginnen Sie dann erneut, indem Sie F5 eingeben oder den grünen "Wiedergabe"-Pfeil neben der Stoppschaltfläche auf der Symbolleiste auswählen.

    Ein weiterer Grund, warum „Bearbeiten und Fortfahren“ fehlschlagen könnte, ist, dass Sie zum Hauptmenü wechseln und Extras>Optionen>Debuggen>Allgemein auswählen müssen. Stellen Sie dann sicher, dass Verlangen, dass Quelldateien genau mit der Originalversion übereinstimmen aktiviert ist.

    Grundlegendes zu den Verknüpfungen "Ausführen" und "Debuggen"

    • F5 oder Debuggen>starten Sie das Debuggen, startet eine Debugsitzung, wenn eine noch nicht aktiv ist, und führt das Programm aus, bis ein Haltepunkt erreicht wird oder das Programm Benutzereingaben benötigt. Wenn keine Benutzereingabe erforderlich ist und kein Haltepunkt zum Drücken verfügbar ist, wird das Programm beendet, und das Konsolenfenster wird geschlossen, wenn die Ausführung des Programms abgeschlossen ist. Wenn Ihr Programm in die Konsole ausgibt, verwenden Sie STRG+F5; oder legen Sie einen Haltepunkt fest, bevor Sie F5 drücken, um das Fenster offen zu halten.
    • STRG+F5, oder Debug>Start ohne Debugging führt die Anwendung aus, ohne in den Debugmodus zu wechseln. Dies ist etwas schneller als das Debuggen, und das Konsolenfenster bleibt geöffnet, nachdem das Programm die Ausführung abgeschlossen hat.
    • Mit F10, der als "Step Over" bezeichnet wird, können Sie Code, Zeile für Zeile durchlaufen und visualisieren, wie der Code ausgeführt wird und welche Variablenwerte bei jedem Ausführungsschritt vorliegen.
    • F11, bekannt als "Schritt in", funktioniert ähnlich wie "Step Over", mit der Ausnahme, dass er in allen Funktionen ausgeführt wird, die in der Ausführungszeile aufgerufen werden. Wenn beispielsweise die ausgeführte Zeile eine Funktion aufruft, verschiebt das Drücken von F11 den Mauszeiger in den Textkörper der Funktion, sodass Sie dem Code der Funktion folgen können, der ausgeführt wird, bevor Sie zur Zeile zurückkehren, an der Sie begonnen haben. Drücken von F10-Schritten über den Funktionsaufruf und wechselt einfach zur nächsten Zeile. Der Funktionsaufruf geschieht weiterhin, aber das Programm hält nicht an, um Ihnen zu zeigen, was sie tut.

Schließen der App

  • Wenn die Rechner-App noch läuft, schließen Sie das Konsolenfenster, um sie zu stoppen.

Die fertige App

Glückwunsch! Sie haben den Code für die Rechner-App fertiggestellt und in Visual Studio erstellt und debuggt.

Nächster Schritt

Weitere Informationen zu Visual Studio für C++