Erstellen eines Konsolenrechners in C++

Der übliche Ausgangspunkt für C++-Programmierer*innen ist eine Hallo-Welt-Anwendung, die über die Befehlszeile ausgeführt wird. Sie beginnen damit in diesem Artikel, und dann gehen wir zu einer schwierigeren Aufgabe: einer Rechner-App.

Voraussetzungen

  • Visual Studio mit der Desktopentwicklung mit installierter und auf Ihrem Computer ausgeführter C++ -Workload. Informationen zum Installieren finden Sie unter Installieren der C++-Unterstützung in Visual Studio.
  • In diesem Tutorial wird ein Feature namens „Bearbeiten und Fortfahren“ veranschaulicht, mit dem Sie Änderungen am Code vornehmen können, während die App ausgeführt wird. Um die Bearbeitung zu aktivieren und fortzufahren, wählen Sie >im Menü Standard Extras Optionen>Debuggen>Allgemein aus, und stellen Sie sicher, dass Quelldateien genau mit der ursprünglichen Version übereinstimmen müssen.

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 alle Optionen, Konfigurationen und Regeln, die zum Erstellen einer App verwendet werden. Es verwaltet auch die Beziehungen zwischen allen Projektdateien und externen Dateien. Erstellen Sie zunächst ein neues Projekt und eine Projektmappe, um ihre Anwendung zu erstellen.

  1. Visual Studio starten – das Visual Studio-Startdialogfeld wird angezeigt. Wählen Sie "Neues Projekt erstellen" aus, um zu beginnen.

    Screenshot des Dialogfelds, das angezeigt wird, wenn Visual Studio 2022 gestartet wird.

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

  2. Wählen Sie in der Liste der Projektvorlagen die Konsolen-App und dann "Weiter" aus.

    Screenshot des Dialogfelds

    Wichtig

    Stellen Sie sicher, dass Sie die C++-Version der Konsolen-App-Vorlage auswählen. Diese erkennen Sie an den Tags C++ , Windows und Konsole, und das Symbol enthält „++“ in der Ecke.

  3. Wählen Sie im Dialogfeld "Neues Projekt konfigurieren" das Textfeld "Projektname" aus, benennen Sie den neuen ProjektrechnerTutorial, und wählen Sie dann "Erstellen" aus.

    Screenshot des Dialogfelds

    Es wird eine leere C++-Windows-Konsolenanwendung "Hallo Welt" erstellt. Konsolenanwendungen verwenden ein Windows-Konsolenfenster, um Ausgabe anzuzeigen und Benutzereingaben entgegenzunehmen. In Visual Studio wird ein Editorfenster geöffnet und der generierte Code angezeigt:

    // 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, dass Ihre neue App erstellt und ausgeführt wird

Die Vorlage für eine neue Windows-Konsolenanwendung erstellt eine einfache „Hallo Welt“-App in C++. An diesem Punkt können Sie sehen, wie die Apps, die Sie direkt in der IDE erstellen, in Visual Studio erstellt und ausgeführt werden.

  1. Um Ihr Projekt zu erstellen, wählen Sie im Menü "Erstellen" die Option "Projektmappe erstellen" aus. Im Fenster Ausgabe wird das Ergebnis des Erstellungsprozess angezeigt.

    Screenshot des Visual Studio-Ausgabefensters. Es wird eine Meldung angezeigt, 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 der Anwendung: Hallo Welt!.

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

    Wenn Sie eine Konsolen-App in Visual Studio starten, führt diese Ihren Code aus und gibt dann „Press any key to close this window.“ (Drücken Sie eine beliebige Taste, um dieses Fenster zu schließen.) aus. . Dies gibt Ihnen die Möglichkeit, sich die Ausgabe anzusehen.

    Herzlichen 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 kehren Sie zu Visual Studio zurück.

Sie haben nun die Tools, um Ihre App nach jeder Änderung zu erstellen und auszuführen, um zu überprüfen, ob der Code noch so funktioniert, wie Sie es erwarten. Später erhalten Sie Informationen zum Debuggen, wenn Ihr Code nicht funktioniert.

Bearbeiten des Codes

Jetzt ändern wir den Code in dieser Vorlage als Rechner-App.

  1. Ersetzen Sie den Inhalt der Datei CalculatorTutorial.cpp 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-Anweisungen ermöglichen es Ihnen, auf Code zu verweisen, der sich in anderen Dateien befindet. Manchmal kommt es vor, dass Sie einen Dateinamen sehen, der von spitzen Klammern (<>) eingeschlossen wird, manchmal wird er von Anführungszeichen (" ") eingeschlossen. Generell werden spitze Klammern verwendet, wenn auf die C++-Standardbibliothek verwiesen wird, während Anführungszeichen für andere Dateien verwendet werden.
    • Die using namespace std;-Zeile sagt dem Compiler, dass dieser Inhalt aus der C++-Standardbibliothek zu erwarten hat, der in dieser Datei verwendet werden soll. Ohne diese Zeile müsste jedem Schlüsselwort aus der Bibliothek std:: vorangestellt werden, um dessen Bereich zu bezeichnen. Ohne diese Zeile müsste beispielsweise jeder Verweis auf cout als std::cout geschrieben werden. Die using-Anweisung wird hinzugefügt, um den Code übersichtlicher zu gestalten.
    • Das Schlüsselwort cout wird verwendet, damit die Standardausgabe in C++ erfolgt. Der Operator << sagt dem Compiler, dass dieser alles, was rechts von ihm steht, an die Standardausgabe senden soll.
    • Das Schlüsselwort endl ist ähnlich wie die Eingabetaste. Es beendet die Zeile und lässt den Cursor in die nächste Zeile springen. Es ist eine bessere Methode, eine \n Zeichenfolge in die Zeichenfolge (enthalten in "") einzufügen, um dasselbe zu tun, da endl immer der Puffer gelebt wird, der die Leistung des Programms beeinträchtigen kann. Da es sich hier jedoch um eine sehr kleine App handelt, wird endl stattdessen zur besseren Lesbarkeit verwendet.
    • Alle C++-Anweisungen müssen mit einem Semikolon enden, und alle C++-Anwendungen müssen eine main()-Funktion enthalten. Diese Funktion wird vom Programm zuerst ausgeführt. Die Funktion main() muss auf den ganzen Code zugreifen können, damit dieser verwendet werden kann.
  2. Um die Datei zu speichern, drücken Sie STRG+S, oder wählen Sie das Symbol "Speichern " am oberen Rand der IDE aus, dem Diskettensymbol in der Symbolleiste unter der Menüleiste.

  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. Es sollte nun ein Konsolenfenster mit dem im Code angegebenen Text angezeigt werden.

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

Hinzufügen von Code für Berechnungen

Eine Klasse ist wie ein Entwurf für ein Objekt, das etwas tut. In diesem Fall definieren wir 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 Eingabefeld für Klassenname den Namen Calculator (Taschenrechner) ein. Wählen Sie OK aus.

    Screenshot des Dialogfelds

    Das Feld "Klassenname" ist auf "Rechner" festgelegt. Das H-Dateifeld enthält "Calculator.h". Das .cpp Dateifeld enthält Calculator.cpp. Das Basisklassenfeld ist leer. Andere Optionen für virtuelle Destruktoren, Inline- und nicht verwaltete Elemente sind deaktiviert.

    Zwei neue Dateien werden Ihrem Projekt hinzugefügt. Um alle geänderten Dateien auf einmal zu speichern, drücken Sie STRG+UMSCHALT+S. Dies ist die Tastenkombination für Datei>Alle speichern. Es gibt auch eine Symbolleistenschaltfläche für Alle speichern: ein Symbol mit zwei Disketten. Diese Schaltfläche befindet sich neben der Schaltfläche Speichern. Generell hat es sich bewährt, Alle speichern häufig auszuführen, damit auch wirklich alle Dateien gespeichert werden.

    Der Assistent zum Hinzufügen von Kursen erstellt .h und .cpp Dateien mit demselben Namen wie die Klasse. Im am Rand der IDE angezeigten Fenster Projektmappen-Explorer können Sie sich eine vollständige Liste Ihrer Projektdateien ansehen. Wenn das Fenster nicht sichtbar ist, können Sie es über die Menüleiste öffnen: "Ansicht>" auswählen Projektmappen-Explorer.

    Screenshot des Visual Studio-Projektmappen-Explorer-Fensters.

    Das Lernprogrammprojekt des Rechners verfügt über einen Headerdateienknoten mit Rechner.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 fenster Projektmappen-Explorer darauf doppelklicken. Doppelklicken Sie Calculator.h , um sie zu öffnen.

  2. Ersetzen Sie den Inhalt von Calculator.h durch den folgenden Code, sodass 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 namens Calculate, die Sie verwenden, um mathematische Operationen für Addition, Subtraktion, Multiplikation und Division auszuführen.
    • C++-Code ist unterteilt in Headerdateien (.h) und Quelldateien (.cpp). Von verschiedenen Compilern werden auch noch andere Dateierweiterungen unterstützt; die eben vorgestellten sind aber die wichtigsten, die Sie kennen sollten. Funktionen und Variablen werden normalerweise deklariert, d. h. ihnen wird in den Headerdateien ein Name und ein Typ zugeordnet, und implementiert, d. h. ihnen wird in den Quelldateien eine Definition zugeordnet. Um auf in einer anderen Datei definierten Code zuzugreifen, können Sie #include "filename.h" verwenden. Dabei ist filename.h der Name der Datei, die die Variablen und Funktionen deklariert, die Sie verwenden möchten.
    • Es hat sich bewährt, Ihren Code auf Grundlage der jeweiligen Funktion in verschiedenen Dateien zu organisieren. Dies erleichtert das spätere Auffinden des benötigen Codes. Hier definieren Sie die Calculator-Klasse und die Datei, die die main()-Funktion enthält, einzeln. Es soll aber dennoch in main() auf die Calculator-Klasse verwiesen werden.
  3. Ein grüner Wellenschalter wird unter Calculate angezeigt, da die Calculate Funktion zwar deklariert wird, sie aber nicht definiert ist. Zeigen Sie mit der Maus auf Calculateden Pfeil nach unten auf dem angezeigten Schraubenzieher, und wählen Sie "Definition berechnen" aus.Calculator.cpp

    Screenshot einer Schraubzieher-Dropdownliste im Visual Studio-Editorfenster. Die Option

    Dieser Code wird hinzugefügt zu Calculator.cpp:

    Screenshot des Visual Studio-Editors mit der Definition der Ctor-Funktion

    Die Definition des Konstruktors lautet: double Calculator::Calculate( double x, char oper, double y) { return 0.0; }

    Momentan wird nur 0.0 zurückgegeben. Ändern Sie das nun.

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

    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 nimmt eine Zahl, einen Operator und eine zweite Zahl, und führt dann die angeforderte Operation mit den angegebenen Zahlen durch.
    • Die Switch-Anweisung überprüft, welcher Operator bereitgestellt wurde, und führt nur den für diese Operation entsprechenden Fall aus. Der „default:“-Fall ist ein Fallback, falls der Benutzer einen Operator eingibt, der nicht akzeptiert wird, damit das Programm nicht unterbrochen wird. Allgemein wird mit ungültiger Benutzereingabe am besten auf elegantere Weise umgegangen. Dies würde für dieses Tutorial aber zu weit führen.
    • Das double-Schlüsselwort denotiert eine Zahlenart, die Dezimalzahlen unterstützt. Auf diese Weise kann der Rechner sowohl Berechnungen mit Dezimalzahlen als auch mit ganzen Zahlen verarbeiten. Die Calculate-Funktion muss aufgrund von double ganz am Anfang des Codes (dadurch wird der Rückgabetyp der Funktion angegeben) immer eine solche Zahl zurückgeben. Deshalb wird auch im „default:“-Fall 0.0 zurückgegeben.
    • Die .h-Datei deklariert die Funktion prototype, die dem Compiler bereits vorab sagt, welcher Parameter benötigt wird, und welcher Rückgabetyp zu erwarten ist. In der .cpp-Datei sind alle Implementierungsdetails der Funktion enthalten.

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.

Aufrufen der Calculator Klassenmemmemmfunktionen

  1. Aktualisieren Sie die main Funktion wie CalculatorTutorial.cpp 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 bei der main()-Funktion starten, müssen Sie den weiteren Code von dort aus aufrufen. Es wird also eine #include-Anweisung benötigt.
    • Einige anfängliche Variablen (x, y, oper und result) werden deklariert, um jeweils die erste Zahl, die zweite Zahl, den Operator und 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 Calculator c;-Zeile deklariert ein Objekt namens „c“ als Instanz der Calculator-Klasse. Die Klasse selbst ist lediglich ein Entwurf dafür, wie der Rechner funktioniert. Das Objekt ist der spezifische Rechner, der die Berechnungen ausführt.
    • Die while (true)-Anweisung ist eine Schleife. Der Code innerhalb der Schleife wird wieder und wieder ausgeführt, so lange, bis die Bedingung innerhalb der () erfüllt ist. Da die Bedingung nur als true aufgeführt ist, ist sie immer wahr, die Schleife wird also ununterbrochen ausgeführt. Um das Programm zu schließen, muss der Benutzer das Konsolenfenster manuell schließen. Andernfalls wartet das Programm ständig auf eine neue Eingabe.
    • Das cin-Schlüsselwort wird verwendet, um Benutzereingaben anzunehmen. Dieser Eingabestream ist intelligent genug, um eine Textzeile zu verarbeiten, die im Konsolenfenster eingegeben wird, und diese in der richtigen Reihenfolge innerhalb aller aufgeführten Variablen zu platzieren, vorausgesetzt, die Benutzereingabe entspricht den benötigten Spezifikationen. Sie können diese Zeile bearbeiten, sodass verschiedene Eingabearten akzeptiert werden, z. B. mehr als zwei Zahlen. Dafür müsste aber auch die Calculate()-Funktion aktualisiert werden.
    • Der c.Calculate(x, oper, y);-Ausdruck ruft die zuvor definierte Calculate-Funktion auf und stellt die eingegebenen Eingabewerte zur Verfügung. Die Funktion gibt dann eine Zahl zurück, die in result gespeichert wird.
    • Abschließend wird result in der Konsole ausgegeben, sodass der Benutzer das Ergebnis der Berechnung ansehen kann.

Erneutes Erstellen und Testen des Codes

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 die EINGABETASTE. Ü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. Die App-Ausgabe: Ergebnis von 5+5 lautet: 10

Debuggen der App

Da der Benutzer nichts in das Konsolenfenster eingeben kann, stellen wir sicher, dass der Rechner unerwartete Eingaben verarbeitet. Anstatt das Programm auszuführen, debuggen wir es, damit wir überprüfen können, was es schritt für Schritt ausführt.

Ausführen der App im Debugger

  1. Legen CalcuatorTutorial.cppSie in , einen Haltepunkt in der Zeile: result = c.Calculate(x, oper, y);. Um den Breakpoint festzulegen, klicken Sie auf der linken Seite des Editorfensters neben der Zeile auf den grauen, vertikalen Rand. Ein roter Punkt wird angezeigt.

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

    Wenn wir nun das Programm debuggen, wird die Ausführung an dieser Zeile angehalten. Wir haben bereits eine grobe Vorstellung, dass das Programm in einfachen Fällen funktioniert. Da die Ausführung nicht bei jedem Aufruf Calculate()angehalten werden soll, lassen Sie uns 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 Eingabefeld für die Bedingung (y == 0) && (oper == '/') ein. Wählen Sie die Schaltfläche "Schließen " aus, um die Haltepunktbedingung zu speichern.

    Screenshot von Visual Studio, in dem der Haltepunkt Einstellungen Popup angezeigt wird.

    Die Bedingung für den Haltepunkt lautet: y==0 && oper == '/' Ist wahr.

    Die Ausführung wird nun 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 "Lokaler Windows-Debugger " mit dem grünen Pfeilsymbol aus. Wenn Sie in Ihrer Konsolen-App z. B. „5 - 0“ eingeben, verhält sich das Programm normal und wird weiter ausgeführt. Wenn Sie nun jedoch „10 / 0“ eingeben, hält das Programm am Breakpoint an. 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 des Visual Studio-Editors. Die Programmausführung wurde am bedingten Haltepunkt in der Zeile angehalten: result = c.Calculate(x, oper, y);.

Nützliche Fenster im Debugger

Beim Debuggen des Codes werden möglicherweise einige neue Fenster angezeigt. Diese Fenster unterstützen Sie beim Debuggen. Sehen Sie sich das Fenster Auto an. Im Fenster Auto sehen Sie die aktuellen Werte der Variablen, die mindestens in den letzten drei Zeilen und bis zur aktuellen Zeile verwendet wurden.

Screenshot des Fensters

Der Wert der Oper ist 47 '/', ergebnis ist 5, x ist 10, und y ist 0.

Wenn Sie alle Variablen dieser Funktion ansehen möchten, wechseln Sie zum Fenster Lokale. Sie können die Werte dieser Variablen beim Debuggen ändern, um zu sehen, welche Auswirkungen sie auf das Programm haben würden. Hier bearbeiten Sie die Variablen jedoch nicht.

Screenshot des Fensters

Der Wert der 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. Sorgen Sie dafür, dass sich das Editorfenster im Vordergrund befindet, indem Sie darauf klicken, bevor Sie diesen Vorgang testen.

Screenshot einer QuickInfo mit dem Wert der Variablen

Fortsetzen des Debuggens

  1. Der gelbe Pfeil auf der linken Seite zeigt den aktuellen Punkt der Ausführung. Die aktuelle Zeile ruft Calculate auf. Drücken Sie also F11, um einen Einzelschritt in der Funktion auszuführen. Jetzt führen Sie Code im Textkörper der Calculate-Funktion aus. Wenden Sie Einzelschritt mit Vorsicht an, da sie damit in alle Funktionen in der Zeile gelangen, in der Sie sich befinden, einschließlich Standardbibliotheksfunktionen. Es ist in Ordnung, in die Standardbibliothek zu gehen, aber Sie möchten sich wohl eher auf Ihren eigenen Code statt auf den Bibliothekscode konzentrieren.

  2. Der Ausführungsstand befindet sich nun gerade auf dem Beginn der Calculate-Funktion. Drücken Sie F10, um zur nächsten Zeile in der Programmausführung zu wechseln. F10 wird auch als Prozedurschritt bezeichnet. Sie können die Option Überspringen verwenden, um von Zeile zu Zeile zu springen, ohne dabei genau die Details jedes Teils der Zeile anzusehen. Prinzipiell sollten Sie Überspringen gegenüber Hineinspringen bevorzugen, es sei denn, Sie möchten sich wirklich den Code genauer ansehen, der von einem anderen Punkt abgerufen wird, so wie Sie dies getan haben, um sich den Textkörper von Calculate anzusehen.

  3. Verwenden Sie F10, um solange Zeilen zu überspringen, bis Sie sich wieder in der main()-Funktion in der anderen Datei befinden, und halten Sie dort in der Zeile cout an.

    Das Programm tut, was erwartet wird: Es dauert die erste Zahl und dividiert sie durch die zweite. Bewegen Sie in der cout-Zeile den Mauszeiger über die Variable result, oder sehen Sie sich result im Fenster Auto an. Sein Wert ist inf, was offenbar falsch ist, also korrigieren wir dies. Die cout-Zeile gibt nur aus, welcher Wert auch immer in result gespeichert ist. Wenn Sie also mithilfe von F10 eine Zeile weiter springen, wird im Konsolenfenster Folgendes angezeigt:

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

    Die App-Ausgabe: 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: Ergebnis lautet: 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“

Wir sollten die Division durch null eleganter handhaben, damit die Benutzer*innen das Problem besser verstehen.

  1. Nehmen Sie in CalculatorTutorial.cpp die folgenden Änderungen vor. (Dank eines Debuggerfeatures namens Bearbeiten und Fortfahren kann das Programm weiter ausgeführt werden, während Sie Änderungen vornehmen). 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 ausgegeben.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            if (oper == '/' && y == 0)
            {
                cout << "Attempted to divide by zero!" << endl;
                continue;
            }
            else
            {
                result = c.Calculate(x, oper, y);
            }
            cout << "Result " << "of " << x << oper << y << " is: " << result << endl;
        }
    
        return 0;
    }
    
  2. Drücken Sie einmal F5 . Die Programmausführung wird ordnungsgemäß fortgeführt, bis das Programm pausiert, um eine Benutzereingabe anzufordern. Geben Sie noch einmal 10 / 0 ein. Nun wird eine hilfreichere Antwort ausgegeben. Der Benutzer wird zu weiterer Eingabe aufgefordert, und das Programm wird weiter normal ausgeführt.

    Screenshot eines Konsolenfensters mit der endgültigen Ausgabe nach der Implementierung von Änderungen zum Behandeln der Division um 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 bearbeiten, während sich das Programm im Debugmodus befindet, besteht die Gefahr, dass der Code veraltet. Dies geschieht, wenn der Debugger noch Ihren alten Code ausführt, und Ihre Änderungen noch nicht übernommen wurden. In so einem Fall werden Sie durch ein Dialogfeld vom Debugger informiert. Gelegentlich sollten Sie F5 drücken, um den gerade ausgeführten Code zu aktualisieren. Insbesondere wenn Sie eine Änderung in einer Funktion vornehmen, während sich der Ausführungspunkt genau innerhalb dieser Funktion befindet, müssen Sie einen Schritt aus dieser Funktion vornehmen, und danach wieder in die Funktion springen, um den aktualisierten Code zu erhalten. Wenn dies nicht funktioniert und eine Fehlermeldung angezeigt wird, können Sie das Debuggen beenden, indem Sie auf das rote Quadrat in der Symbolleiste unter den Menüs oben in der IDE klicken, und dann das Debuggen erneut starten, indem Sie F5 eingeben oder den grünen "Wiedergabe"-Pfeil neben der Stoppschaltfläche auf der Symbolleiste auswählen.

    Ein weiterer Grund zum Bearbeiten und Fortsetzen ist, wenn eine Meldung angezeigt wird, die besagt: "Die Quelldateien müssen exakt mit der ursprünglichen Versionseinstellung unter Debug-Options-General>> übereinstimmen..." angezeigt wird. Um dies zu beheben, wählen Sie im Menü Standard "Extras>Optionen>Debuggen>Allgemein" aus, und stellen Sie sicher, dass Quelldateien genau mit der ursprünglichen Version übereinstimmen müssen.

    Grundlegendes zu den Tastenkombinationen zum Ausführen und Debuggen

    • F5 bzw. Debuggen>Debuggen starten startet eine Debugsitzung, wenn noch keine aktiv ist, und führt das Programm so lange aus, bis ein Breakpoint erreicht wird, oder das Programm Benutzereingabe erfordert. Wenn keine Benutzereingabe benötigt wird, und es keinen Breakpoint gibt, der erreicht werden könnte, wird das Programm beendet, und das Konsolenfenster schließt sich automatisch, sobald das Programm die Ausführung beendet hat. Wenn Sie ein „Hallo Welt“- oder ähnliches Programm ausführen, verwenden Sie STRG+F5, oder legen einen Haltepunkt fest, bevor Sie F5 drücken, damit das Fenster nicht geschlossen wird.
    • Mit STRG+F5 bzw. Debuggen>Ohne Debuggen starten wird die Anwendung ausgeführt, ohne dass der Debugmodus gestartet wird. Dies benötigt etwas weniger Zeit als das Debuggen, und das Konsolenfenster bleibt geöffnet, nachdem das Programm die Ausführung beendet hat.
    • F10 bzw. Überspringen ermöglicht es Ihnen, Zeile für Zeile den Code zu durchlaufen, wodurch Sie eine Vorstellung davon erhalten, wie der Code ausgeführt wird, und welche Variablenwerte es an jedem Ausführungsschritt gibt.
    • F11 bzw. Hineinspringen funktioniert ähnlich wie Überspringen. Allerdings wird hierbei in jede Funktion hineingesprungen, die auf der jeweiligen Ausführungszeile aufgerufen wird. Wenn die Zeile, die ausgeführt wird, z. B. eine Funktion aufruft, lässt F11 den Zeiger in den Textkörper dieser Funktion springen, damit Sie dem ausgeführten Funktionscode folgen können, bevor Sie zur Zeile zurückkehren, in der Sie F11 gedrückt haben. Wenn Sie F10 drücken, werden Funktionsaufrufe einfach übersprungen, und der Zeiger geht einfach zur nächsten Zeile. Der Funktionsaufruf findet dennoch statt, das Programm pausiert jedoch nicht, damit Sie sich ansehen können, was es gerade tut.

Schließen der App

  • Wenn die Ausführung noch nicht beendet ist, schließen Sie das Konsolenfenster für die Rechner-App.

Hinzufügen einer Git-Quellcodeverwaltung

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

Tipp

Git ist das am häufigsten verwendete moderne Versionskontrollsystem. Unabhängig davon, ob Sie professioneller Entwickler sind oder erst die Grundlagen des Programmierens erlernen, kann Git sehr nützlich für Sie sein. Wenn Sie noch nicht mit Git vertraut sind, ist die Website https://git-scm.com/ ein guter Ausgangspunkt. Dort finden Sie Kurzübersichten, ein beliebtes E-Book sowie Videos zu den Git-Grundlagen.

Um Ihren Code Git zu zuordnen, müssen Sie zunächst ein neues Git-Repository erstellen, in dem sich Ihr Code befindet. Gehen Sie dazu wie folgt vor:

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

    Ein Screenshot, der die Schaltflächen der Git-Quellcodeverwaltung unter dem Bereich „Projektmappen-Explorer“ mit der hervorgehobenen Schaltfläche „Zur Quellcodeverwaltung hinzufügen“ zeigt.

  2. Melden Sie sich in dem Dialogfeld Ein Git-Repository erstellen in GitHub an.

    Screenshot des Dialogfelds „GIT-Repository erstellen“, in dem Sie ein neues GitHub-Repository erstellen können

    Der Repositoryname wird für Ihren Ordnerspeicherort automatisch aufgefüllt. Ihr neues Repository ist standardmäßig privat. Das bedeutet, dass Sie die einzige Person sind, die darauf zugreifen kann.

    Tipp

    Unabhängig davon, ob Ihr Repository privat oder öffentlich ist, sollten Sie über eine auf GitHub gespeicherte Remotesicherung Ihres Codes verfügen. Auch wenn Sie nicht mit einem Team zusammenarbeiten, stellt Ihnen ein Remoterepository Ihren Code auf jedem Computer zur Verfügung.

  3. Wählen Sie Erstellen und Pushen aus.

    Nachdem Sie Ihr Repository erstellt haben, werden auf der Statusleiste Details zum Status angezeigt.

    Screenshot der Statusleiste des Repositorys unter dem Bereich „Visual Studio Projektmappen-Explorer“ mit dem Branchnamen und der Anzahl der ausstehenden Änderungen

    Das erste Symbol mit den Pfeilen zeigt, wie viele ausgehende und eingehende Commits in Ihrer aktuellen Verzweigung liegen. Sie können dieses Symbol verwenden, um die eingehenden Commits zu pullen oder ausgehende Commits mithilfe von Push zu übertragen. Sie können sich diese Commits auch zuerst anzeigen lassen. Klicken Sie dazu auf das Symbol, und wählen Sie dann Ausgehend/Eingehend anzeigen aus.

    Das zweite Symbol mit dem Stift zeigt Ihnen die Anzahl der Änderungen ohne Commits an Ihrem Code an. Sie können auf dieses Symbol klicken, um diese Änderungen im Fenster Git-Änderungen anzuzeigen.

Weitere Informationen zur Verwendung von Git mit Ihrer Anwendung finden Sie in der Dokumentation zur Visual Studio-Versionskontrolle.

Die fertige App

Herzlichen 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ächste Schritte

Weitere Informationen zu Visual Studio für C++

Der übliche Ausgangspunkt für C++-Programmierer*innen ist eine Hallo-Welt-Anwendung, die über die Befehlszeile ausgeführt wird. Sie beginnen damit in diesem Artikel, und dann setzen wir auf etwas schwierigeres: eine 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 alle Optionen, Konfigurationen und Regeln, die zum Erstellen einer App verwendet werden. Es verwaltet auch die Beziehungen zwischen allen Projektdateien und externen Dateien. Erstellen Sie zunächst ein neues Projekt und eine Projektmappe, um ihre Anwendung zu erstellen.

  1. Wählen Sie auf der Menüleiste in Visual Studio "Neues>Projekt">aus. Das Fenster Neues Projekt wird angezeigt.

  2. Prüfen Sie auf der linken Randleiste, ob Visual C++ ausgewählt ist. Wählen Sie in der Mitte die Windows-Konsolenanwendung aus.

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

    Screenshot des Dialogfelds

    Es wird eine leere C++-Windows-Konsolenanwendung "Hallo Welt" erstellt. Konsolenanwendungen verwenden ein Windows-Konsolenfenster, um Ausgabe anzuzeigen und Benutzereingaben entgegenzunehmen. In Visual Studio wird ein Editorfenster geöffnet und der generierte Code angezeigt:

    // 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, dass Ihre neue App erstellt und ausgeführt wird

Die Vorlage für eine neue Windows-Konsolenanwendung erstellt eine einfache C++-„Hallo Welt“-App. An diesem Punkt können Sie sehen, wie die Apps, die Sie direkt in der IDE erstellen, in Visual Studio erstellt und ausgeführt werden.

  1. Um Ihr Projekt zu erstellen, wählen Sie im Menü "Erstellen" die Option "Projektmappe erstellen" aus. Im Fenster Ausgabe wird das Ergebnis des Erstellungsprozess angezeigt.

    Screenshot des Visual Studio-Ausgabefensters mit der Meldung, dass die Erstellung erfolgreich war

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

    Screenshot der Debugging-Konsole in Visual Studio mit der Ausgabe: „Hello World!“

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

    Wenn Sie eine Konsolen-App in Visual Studio starten, führt diese Ihren Code aus und gibt dann „Press any key to close this window.“ (Drücken Sie eine beliebige Taste, um dieses Fenster zu schließen.) aus. . Dies gibt Ihnen die Möglichkeit, sich die Ausgabe anzusehen.

    Herzlichen 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 kehren Sie zu Visual Studio zurück.

Sie haben nun die Tools, um Ihre App nach jeder Änderung zu erstellen und auszuführen, um zu überprüfen, ob der Code noch so funktioniert, wie Sie es erwarten. Später erhalten Sie Informationen zum Debuggen, wenn Ihr Code nicht funktioniert.

Bearbeiten des Codes

Lassen Sie uns nun den Code in dieser Vorlage in eine Rechner-App umwandeln.

  1. Ersetzen Sie den Inhalt der Datei CalculatorTutorial.cpp 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-Anweisungen ermöglichen es Ihnen, auf Code zu verweisen, der sich in anderen Dateien befindet. Manchmal kommt es vor, dass Sie einen Dateinamen sehen, der von spitzen Klammern (<>) eingeschlossen wird, manchmal wird er von Anführungszeichen (" ") eingeschlossen. Generell werden spitze Klammern verwendet, wenn auf die C++-Standardbibliothek verwiesen wird, während Anführungszeichen für andere Dateien verwendet werden.
    • Die using namespace std;-Zeile sagt dem Compiler, dass dieser Inhalt aus der C++-Standardbibliothek zu erwarten hat, der in dieser Datei verwendet werden soll. Ohne diese Zeile müsste jedem Schlüsselwort aus der Bibliothek std:: vorangestellt werden, um dessen Bereich zu bezeichnen. Ohne diese Zeile müsste beispielsweise jeder Verweis auf cout als std::cout geschrieben werden. Die using-Anweisung wird hinzugefügt, um den Code übersichtlicher zu gestalten.
    • Das Schlüsselwort cout wird verwendet, damit die Standardausgabe in C++ erfolgt. Der Operator *<< sagt dem Compiler, dass dieser alles, was rechts von ihm steht, an die Standardausgabe senden soll.
    • Das Schlüsselwort endl ist ähnlich wie die Eingabetaste. Es beendet die Zeile und lässt den Cursor in die nächste Zeile springen. Es ist eine bessere Methode, eine \n Zeichenfolge in die Zeichenfolge (enthalten in "") einzufügen, um dasselbe zu tun, da endl der Puffer immer gelebt und die Leistung des Programms beeinträchtigt werden kann. Da es sich hier jedoch um eine sehr kleine App handelt, wird endl stattdessen zur besseren Lesbarkeit verwendet.
    • Alle C++-Anweisungen müssen mit einem Semikolon enden, und alle C++-Anwendungen müssen eine main()-Funktion enthalten. Diese Funktion wird vom Programm zuerst ausgeführt. Die Funktion main() muss auf den ganzen Code zugreifen können, damit dieser verwendet werden kann.
  2. Um die Datei zu speichern, drücken Sie STRG+S, oder wählen Sie das Symbol "Speichern " am oberen Rand der IDE aus, dem Diskettensymbol in der Symbolleiste unter der Menüleiste.

  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 Sie ein Popup erhalten, das besagt , dass dieses Projekt veraltet ist, wählen Sie möglicherweise erneut "Dieses Dialogfeld nicht anzeigen" aus, und wählen Sie dann "Ja " aus, um Ihre Anwendung zu erstellen. Es sollte nun ein Konsolenfenster mit dem im Code angegebenen Text angezeigt werden.

    Video, das den Prozess der Ausführung der Rechner-App in der IDE zeigt.

    Zuerst wird ein Dialogfeld angezeigt, in dem sie gefragt wird, ob das Projekt nicht mehr aktuell ist. Das Kontrollkästchen „Dieses Dialogfeld nicht mehr anzeigen“ ist aktiviert. „Ja“ wird ausgewählt, um das Projekt zu erstellen. Das Rechnerprojekt wird erstellt und dann in einem Windows-Konsolenfenster gestartet.

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

Hinzufügen von Code für Berechnungen

Eine Klasse ist wie ein Entwurf für ein Objekt, das etwas tut. In diesem Fall definieren wir 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 Eingabefeld für Klassenname den Namen Calculator (Taschenrechner) ein. Wählen Sie OK aus.

    Video, in dem der Benutzer das Dialogfeld

    Eine Klasse ist wie ein Entwurf für ein Objekt, das etwas tut. In diesem Fall soll ein Rechner und dessen Funktionsweise definiert werden.

    Zwei neue Dateien werden Ihrem Projekt hinzugefügt. Um alle geänderten Dateien auf einmal zu speichern, drücken Sie STRG+UMSCHALT+S. Dies ist die Tastenkombination für Datei>Alle speichern. Es gibt auch eine Symbolleistenschaltfläche für Alle speichern: ein Symbol mit zwei Disketten. Diese Schaltfläche befindet sich neben der Schaltfläche Speichern. Generell hat es sich bewährt, Alle speichern häufig auszuführen, damit auch wirklich alle Dateien gespeichert werden.

    Der Assistent zum Hinzufügen von Kursen erstellt .h und .cpp Dateien mit demselben Namen wie die Klasse. Im am Rand der IDE angezeigten Fenster Projektmappen-Explorer können Sie sich eine vollständige Liste Ihrer Projektdateien ansehen. Wenn das Fenster nicht sichtbar ist, können Sie es über die Menüleiste öffnen: "Ansicht>" auswählen Projektmappen-Explorer.

    Screenshot des Visual Studio-Projektmappen-Explorer-Fensters.

    Das Lernprogrammprojekt des Rechners verfügt über einen Headerdateienknoten 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 fenster Projektmappen-Explorer darauf doppelklicken. Doppelklicken Sie Calculator.h , um sie zu öffnen.

  2. Ersetzen Sie den Inhalt von Calculator.h durch den folgenden Code, sodass 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 namens Calculate, die Sie verwenden, um mathematische Operationen für Addition, Subtraktion, Multiplikation und Division auszuführen.
    • C++-Code ist unterteilt in Headerdateien (.h) und Quelldateien (.cpp). Von verschiedenen Compilern werden auch noch andere Dateierweiterungen unterstützt; die eben vorgestellten sind aber die wichtigsten, die Sie kennen sollten. Funktionen und Variablen werden normalerweise deklariert, d. h. ihnen wird in den Headerdateien ein Name und ein Typ zugeordnet, und implementiert, d. h. ihnen wird in den Quelldateien eine Definition zugeordnet. Um auf in einer anderen Datei definierten Code zuzugreifen, können Sie #include "filename.h" verwenden. Dabei ist filename.h der Name der Datei, die die Variablen und Funktionen deklariert, die Sie verwenden möchten.
    • Es hat sich bewährt, Ihren Code auf Grundlage der jeweiligen Funktion in verschiedenen Dateien zu organisieren. Dies erleichtert das spätere Auffinden des benötigen Codes. Hier definieren Sie die Calculator-Klasse und die Datei, die die main()-Funktion enthält, einzeln. Es soll aber dennoch in main() auf die Calculator-Klasse verwiesen werden.
  3. Ein grüner Wellenschalter wird unter Calculate angezeigt, da die Calculate Funktion zwar deklariert wird, sie aber nicht definiert ist. Zeigen Sie mit der Maus auf Calculateden Pfeil nach unten auf dem angezeigten Schraubenzieher, und wählen Sie "Definition berechnen" aus.Calculator.cpp Ein Popupelement wird angezeigt, das Ihnen eine Vorschau der Codeänderung anzeigt, die in der anderen Datei vorgenommen wurde. Der Code wurde Calculator.cpp hinzugefügt.

    Video mit der Dropdownliste

    Momentan wird nur 0.0 zurückgegeben. Ändern Sie das nun. Drücken Sie ESC, um das Popupelement zu schließen.

  4. Wechseln Sie zur Calculator.cpp-Datei im Editorfenster. Ersetzen Sie den Inhalt der Datei durch 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 nimmt eine Zahl, einen Operator und eine zweite Zahl, und führt dann die angeforderte Operation mit den angegebenen Zahlen durch.
    • Die Switch-Anweisung überprüft, welcher Operator bereitgestellt wurde, und führt nur den für diese Operation entsprechenden Fall aus. Der „default:“-Fall ist ein Fallback, falls der Benutzer einen Operator eingibt, der nicht akzeptiert wird, damit das Programm nicht unterbrochen wird. Allgemein wird mit ungültiger Benutzereingabe am besten auf elegantere Weise umgegangen. Dies würde für dieses Tutorial aber zu weit führen.
    • Das double-Schlüsselwort denotiert eine Zahlenart, die Dezimalzahlen unterstützt. Auf diese Weise kann der Rechner sowohl Berechnungen mit Dezimalzahlen als auch mit ganzen Zahlen verarbeiten. Die Calculate-Funktion muss aufgrund von double ganz am Anfang des Codes (dadurch wird der Rückgabetyp der Funktion angegeben) immer eine solche Zahl zurückgeben. Deshalb wird auch im „default:“-Fall 0.0 zurückgegeben.
    • Die .h-Datei deklariert die Funktion prototype, die dem Compiler bereits vorab sagt, welcher Parameter benötigt wird, und welcher Rückgabetyp zu erwarten ist. In der .cpp-Datei sind alle Implementierungsdetails der Funktion enthalten.

Wenn Sie nun den Code noch einmal erstellen und ausführen, wird er nach der Aufforderung, den gewünschten Vorgang anzugeben, erneut beendet. Bearbeiten Sie als nächsten Schritt die main-Funktion, um einige Berechnungen durchzuführen.

Aufrufen der Memberfunktionen der Rechnerklasse

  1. Aktualisieren Sie nun die main-Funktion in 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;
    }
    

    Grundlegendes zum Code

    • Da C++-Programme immer bei der main()-Funktion starten, müssen Sie den weiteren Code von dort aus aufrufen. Es wird also eine #include-Anweisung benötigt.
    • Einige anfängliche Variablen (x, y, oper und result) werden deklariert, um jeweils die erste Zahl, die zweite Zahl, den Operator und 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 Calculator c;-Zeile deklariert ein Objekt namens „c“ als Instanz der Calculator-Klasse. Die Klasse selbst ist lediglich ein Entwurf dafür, wie der Rechner funktioniert. Das Objekt ist der spezifische Rechner, der die Berechnungen ausführt.
    • Die while (true)-Anweisung ist eine Schleife. Der Code innerhalb der Schleife wird wieder und wieder ausgeführt, so lange, bis die Bedingung innerhalb der () erfüllt ist. Da die Bedingung nur als true aufgeführt ist, ist sie immer wahr, die Schleife wird also ununterbrochen ausgeführt. Um das Programm zu schließen, muss der Benutzer das Konsolenfenster manuell schließen. Andernfalls wartet das Programm ständig auf eine neue Eingabe.
    • Das cin-Schlüsselwort wird verwendet, um Benutzereingaben anzunehmen. Dieser Eingabestream ist intelligent genug, um eine Textzeile zu verarbeiten, die im Konsolenfenster eingegeben wird, und diese in der richtigen Reihenfolge innerhalb aller aufgeführten Variablen zu platzieren, vorausgesetzt, die Benutzereingabe entspricht den benötigten Spezifikationen. Sie können diese Zeile bearbeiten, sodass verschiedene Eingabearten akzeptiert werden, z. B. mehr als zwei Zahlen. Dafür müsste aber auch die Calculate()-Funktion aktualisiert werden.
    • Der c.Calculate(x, oper, y);-Ausdruck ruft die zuvor definierte Calculate-Funktion auf und stellt die eingegebenen Eingabewerte zur Verfügung. Die Funktion gibt dann eine Zahl zurück, die in result gespeichert wird.
    • Abschließend wird result in der Konsole ausgegeben, sodass der Benutzer das Ergebnis der Berechnung ansehen kann.

Erneutes Erstellen und Testen des Codes

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 die EINGABETASTE. Überprüfen Sie, ob das Ergebnis 10 ist.

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

Debuggen der App

Da der Benutzer nichts in das Konsolenfenster eingeben kann, stellen wir sicher, dass der Rechner unerwartete Eingaben verarbeitet. Anstatt das Programm auszuführen, debuggen wir es stattdessen, sodass wir überprüfen können, was es schritt-für-Schritt ausführt.

Ausführen der App im Debugger

  1. Legen CalcuatorTutorial.cppSie in der Zeile einen Haltepunkt result = c.Calculate(x, oper, y); fest. Um den Breakpoint festzulegen, klicken Sie auf der linken Seite des Editorfensters neben der Zeile auf den grauen, vertikalen Rand. Ein roter Punkt wird angezeigt.

    Video, in dem der Benutzer einen Haltepunkt in Zeile 25 festlegt: Ergebnis = c.Calculate(x, Oper, y);.

    Ab sofort wird die Ausführung dann immer bei dieser Zeile angehalten, wenn Sie das Programm debuggen. Wir haben bereits eine grobe Vorstellung, dass das Programm in einfachen Fällen funktioniert. Da wir die Ausführung nicht jedes Mal anhalten möchten, legen wir den Breakpoint als bedingt fest.

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

    Video zum Festlegen eines bedingten Haltepunkts.

    Der Haltepunkt befindet sich in der Zeile: Ergebnis = c Punkt Berechnen ( x, Oper, y). 'Bedingungen...' wird im Haltepunktdropdown ausgewählt, wodurch das Einstellungsfenster für Haltepunkte geöffnet wird. Die Option "Bedingung" wird aktiviert, darunter werden die Dropdowns als "Bedingter Ausdruck" und "Ist wahr" festgelegt. Der Benutzer gibt y == 0 && oper == '/' in das Bedingungstextfeld ein und wählt dann nahe aus, um den bedingten Haltepunkt festzulegen.

    Die Ausführung wird nun also genau dann am Breakpoint angehalten, wenn versucht wird, durch 0 zu teilen.

  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 z. B. „5 - 0“ eingeben, verhält sich das Programm normal und wird weiter ausgeführt. Wenn Sie nun jedoch „10 / 0“ eingeben, hält das Programm am Breakpoint an. Auch wenn Sie eine beliebige Anzahl von Leerzeichen zwischen den Operator und die Zahlen setzen, ist cin intelligent genug, um die Eingabe dennoch korrekt zu analysieren.

    Video, in dem die Programmausführung am bedingten Haltepunkt angehalten wurde.

    Der Benutzer gibt 5 - 0 ein. Die App-Ausgabe: 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 unterstützen Sie beim Debuggen. Sehen Sie sich das Fenster Auto an. Im Fenster Auto sehen Sie die aktuellen Werte der Variablen, die mindestens in den letzten drei Zeilen und bis zur aktuellen Zeile verwendet wurden.

Screenshot des Fensters

Der Wert der Oper ist 47 '/', ergebnis ist 5, x ist 10, und y ist 0.

Wenn Sie alle Variablen dieser Funktion ansehen möchten, wechseln Sie zum Fenster Lokale. Sie können die Werte dieser Variablen während des Debuggens bearbeiten, um zu erfahren, welche Auswirkung sie auf das Programm haben würden. Hier bearbeiten Sie die Variablen jedoch nicht.

Screenshot des Fensters

Der Wert der 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. Sorgen Sie dafür, dass sich das Editorfenster im Vordergrund befindet, indem Sie darauf klicken, bevor Sie diesen Vorgang testen.

Video, in dem eine QuickInfo veranschaulicht wird, die angezeigt wird, während Sie mit dem Mauszeiger auf die Variable y zeigen. Es zeigt den aktuellen y-Wert an, der 0 ist.

Fortsetzen des Debuggens

  1. Der gelbe Pfeil auf der linken Seite zeigt den aktuellen Punkt der Ausführung. Da die aktuelle Zeile Calculate aufruft, drücken Sie F11, um in die Funktion einzusteigen (Einzelschritt), sodass Sie in den Textkörper der Calculate-Funktion gelangen. Wenden Sie Einzelschritt mit Vorsicht an, da sie damit in alle Funktionen in der Zeile gelangen, in der Sie sich befinden, einschließlich Standardbibliotheksfunktionen. Es ist in Ordnung, in die Standardbibliothek zu gehen, aber Sie möchten sich wohl eher auf Ihren eigenen Code statt auf den Bibliothekscode konzentrieren.

  2. Der Ausführungsstand befindet sich nun gerade auf dem Beginn der Calculate-Funktion. Drücken Sie F10, um zur nächsten Zeile in der Programmausführung zu wechseln. F10 wird auch als Prozedurschritt bezeichnet. Sie können die Option Überspringen verwenden, um von Zeile zu Zeile zu springen, ohne dabei genau die Details jedes Teils der Zeile anzusehen. Prinzipiell sollten Sie Überspringen gegenüber Hineinspringen bevorzugen, es sei denn, Sie möchten sich wirklich den Code genauer ansehen, der von einem anderen Punkt abgerufen wird, so wie Sie dies getan haben, um sich den Textkörper von Calculate anzusehen.

  3. Verwenden Sie F10, um solange Zeilen zu überspringen, bis Sie sich wieder in der main()-Funktion in der anderen Datei befinden, und halten Sie dort in der Zeile cout an.

    Video, das zeigt, wie Sie die einzelnen Codezeilen in der Berechnungsfunktion durchlaufen.

    Jede Codezeile in der Calculate-Funktion wird durchlaufen, bis das Steuerelement zur Standard Funktion zurückkehrt. Der Benutzer zeigt dann mit der Maus auf die Variable mit dem Namen des Ergebnisses, um den Wert anzuzeigen, der lautet: inf."

    Das Programm tut, was erwartet wird: Es dauert die erste Zahl und dividiert sie durch die zweite. Bewegen Sie in der cout-Zeile den Mauszeiger über die Variable result, oder sehen Sie sich result im Fenster Auto an. Sein Wert ist inf, was offenbar falsch ist, also korrigieren wir dies. Die cout-Zeile gibt nur aus, welcher Wert auch immer in result gespeichert ist. Wenn Sie also mithilfe von F10 eine Zeile weiter springen, wird im Konsolenfenster Folgendes angezeigt:

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

    Die App-Ausgabe: 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: Ergebnis lautet: 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“

Wir sollten die Division durch null eleganter handhaben, damit die Benutzer*innen das Problem besser verstehen.

  1. Nehmen Sie in CalculatorTutorial.cpp die folgenden Änderungen vor. (Dank eines Debuggerfeatures namens Bearbeiten und Fortfahren kann das Programm weiter ausgeführt werden, während Sie Änderungen vornehmen). Die Änderung besteht darin, eine if-Anweisung nach cin >> x >> oper >> y; hinzuzufügen, um zu überprüfen, ob eine Division durch 0 stattgefunden hat, und eine Nachricht an die Benutzer*innen auszugeben, falls dies geschieht. Andernfalls wird das Ergebnis ausgegeben:

    // 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 ordnungsgemäß fortgeführt, bis das Programm pausiert, um eine Benutzereingabe anzufordern. Geben Sie noch einmal 10 / 0 ein. Nun wird eine hilfreichere Antwort ausgegeben. Der Benutzer wird zu weiterer Eingabe aufgefordert, und das Programm wird weiter normal ausgeführt.

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

    Hinweis

    Wenn Sie Code bearbeiten, während sich das Programm im Debugmodus befindet, besteht die Gefahr, dass der Code veraltet. Dies geschieht, wenn der Debugger noch Ihren alten Code ausführt, und Ihre Änderungen noch nicht übernommen wurden. In so einem Fall werden Sie durch eine Popupmeldung vom Debugger informiert. Gelegentlich sollten Sie F5 drücken, um den gerade ausgeführten Code zu aktualisieren. Insbesondere wenn Sie eine Änderung in einer Funktion vornehmen, während sich der Ausführungspunkt genau innerhalb dieser Funktion befindet, nehmen Sie einen Schritt aus dieser Funktion vor, und springen Sie danach wieder in die Funktion, um den aktualisierten Code zu erhalten. Wenn dies aus welchen Gründen auch immer nicht funktioniert, und eine Fehlermeldung zurückgegeben wird, können Sie das Debuggen anhalten, indem Sie oben in der IDE in der Symbolleiste unter den Menüs auf das rote Quadrat klicken, dann das Debugging mithilfe von F5 erneut starten, oder in der Symbolleiste neben der Stoppschaltfläche auf den grünen Wiedergabepfeil klicken.

    Ein weiterer Grund zum Bearbeiten und Fortsetzen ist möglicherweise, dass Sie zum Menü Standard wechseln und "Extras Optionen>>Debuggen>Allgemein" auswählen und sicherstellen, dass Quelldateien genau mit der ursprünglichen Version übereinstimmen müssen.

    Grundlegendes zu den Tastenkombinationen zum Ausführen und Debuggen

    • F5 bzw. Debuggen>Debuggen starten startet eine Debugsitzung, wenn noch keine aktiv ist, und führt das Programm so lange aus, bis ein Breakpoint erreicht wird, oder das Programm Benutzereingabe erfordert. Wenn keine Benutzereingabe benötigt wird, und es keinen Breakpoint gibt, der erreicht werden könnte, wird das Programm beendet, und das Konsolenfenster schließt sich automatisch, sobald das Programm die Ausführung beendet hat. Wenn Sie ein „Hallo Welt“- oder ähnliches Programm ausführen, verwenden Sie STRG+F5, oder legen einen Haltepunkt fest, bevor Sie F5 drücken, damit das Fenster nicht geschlossen wird.
    • Mit STRG+F5 bzw. Debuggen>Ohne Debuggen starten wird die Anwendung ausgeführt, ohne dass der Debugmodus gestartet wird. Dies benötigt etwas weniger Zeit als das Debuggen, und das Konsolenfenster bleibt geöffnet, nachdem das Programm die Ausführung beendet hat.
    • F10 bzw. Überspringen ermöglicht es Ihnen, Zeile für Zeile den Code zu durchlaufen, wodurch Sie eine Vorstellung davon erhalten, wie der Code ausgeführt wird, und welche Variablenwerte es an jedem Ausführungsschritt gibt.
    • F11 bzw. Hineinspringen funktioniert ähnlich wie Überspringen. Allerdings wird hierbei in jede Funktion hineingesprungen, die auf der jeweiligen Ausführungszeile aufgerufen wird. Wenn die Zeile, die ausgeführt wird, z. B. eine Funktion aufruft, lässt F11 den Zeiger in den Textkörper dieser Funktion springen, damit Sie dem ausgeführten Funktionscode folgen können, bevor Sie zur Zeile zurückkehren, in der Sie F11 gedrückt haben. Wenn Sie F10 drücken, werden Funktionsaufrufe einfach übersprungen, und der Zeiger geht einfach zur nächsten Zeile. Der Funktionsaufruf findet dennoch statt, das Programm pausiert jedoch nicht, damit Sie sich ansehen können, was es gerade tut.

Schließen der App

  • Wenn die Ausführung noch nicht beendet ist, schließen Sie das Konsolenfenster für die Rechner-App.

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

Nächste Schritte

Weitere Informationen zu Visual Studio für C++