Erstellen eines C++-Konsolen-App-ProjektsCreate a C++ console app project

C++-Programmierer beginnen häufig mit einer „Hallo, Welt!“-The usual starting point for a C++ programmer is a "Hello, world!" Anwendung, die über die Befehlszeile ausgeführt wird.application that runs on the command line. Eine solche Anwendung erstellen Sie mithilfe dieses Artikels in Visual Studio. Anschließend beschäftigen Sie sich mit einer etwas schwierigeren Aufgabe: der Erstellung einer Taschenrechner-App.That's what you'll create in Visual Studio in this article, and then we'll move on to something more challenging: a calculator app.

VoraussetzungenPrerequisites

Erstellen Ihres App-ProjektsCreate your app project

Visual Studio verwendet Projekte, um Code für eine App zu ordnen, und Projektmappen, um Ihre Projekte zu ordnen.Visual Studio uses projects to organize the code for an app, and solutions to organize your projects. Ein Projekt beinhaltet alle Optionen, Einstellungen und Regeln, die Sie zum Erstellen Ihrer Anwendung verwendet haben.A project contains all the options, configurations, and rules used to build your apps. Es verwaltet auch die Beziehungen zwischen allen Projektdateien und externen Dateien.It also manages the relationship between all the project's files and any external files. Wenn Sie Ihre App erstellen möchten, müssen Sie zuerst ein neues Projekt und eine Projektmappe erstellen.To create your app, first, you'll create a new project and solution.

  1. Wenn Sie Visual Studio starten, wird das Dialogfeld für Visual Studio 2019 angezeigt.If you've just started Visual Studio, you'll see the Visual Studio 2019 dialog box. Klicken Sie auf Neues Projekt erstellen, um zu beginnen.Choose Create a new project to get started.

    Startdialogfeld von Visual Studio 2019The Visual Studio 2019 initial dialog

    Alternativ können Sie auch in der Menüleiste in Visual Studio Datei > Neu > Projekt aufrufen.Otherwise, on the menubar in Visual Studio, choose File > New > Project. Dadurch wird das Fenster Neues Projekt erstellen geöffnet.The Create a new project window opens.

  2. Wählen Sie in der Liste der Projektvorlagen Konsolen-App aus, und klicken Sie anschließend auf Weiter.In the list of project templates, choose Console App, then choose Next.

    Auswählen der Vorlage für die Konsolen-AppChoose the Console App template

    Wichtig

    Wählen Sie die C++-Version der Vorlage Konsolen-App aus.Make sure you choose the C++ version of the Console App template. Diese erkennen Sie an den Tags C++ , Windows und Konsole, und das Symbol enthält „++“ in der Ecke.It has the C++, Windows, and Console tags, and the icon has "++" in the corner.

  3. Klicken Sie im Dialogfeld Neues Projekt konfigurieren in das Feld Projektname, und geben Sie dort den Namen CalculatorTutorial für das neue Projekt ein. Klicken Sie anschließend auf Erstellen.In the Configure your new project dialog box, select the Project name edit box, name your new project CalculatorTutorial, then choose Create.

    Benennen Ihres Projekts im Dialogfeld „Neues Projekt konfigurieren“Name your project in the Configure your new project dialog

    Eine leere C++-Windows-Konsolenanwendung wird erstellt.An empty C++ Windows console application gets created. Konsolenanwendungen verwenden ein Windows-Konsolenfenster, um Ausgabe anzuzeigen und Benutzereingaben entgegenzunehmen.Console applications use a Windows console window to display output and accept user input. In Visual Studio wird ein Editorfenster geöffnet und der generierte Code angezeigt:In Visual Studio, an editor window opens and shows the generated code:

    // 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 wirdVerify that your new app builds and runs

Die Vorlage für eine neue Windows-Konsolenanwendung erstellt eine einfache „Hallo Welt“-App in C++.The template for a new Windows console application creates a simple C++ "Hello World" 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.At this point, you can see how Visual Studio builds and runs the apps you create right from the IDE.

  1. Wählen Sie zum Erstellen Ihres Projekts aus dem Menü Erstellen die Option Projektmappe erstellen aus.To build your project, choose Build Solution from the Build menu. Im Fenster Ausgabe wird das Ergebnis des Erstellungsprozess angezeigt.The Output window shows the results of the build process.

    Erstellen des ProjektsBuild the project

  2. Klicken Sie zum Ausführen des Codes auf der Menüleiste auf Debuggen > Ohne Debuggen starten.To run the code, on the menu bar, choose Debug, Start without debugging.

    Starten des ProjektsStart the project

    Ein Konsolenfenster wird geöffnet, und Ihre App daraufhin ausgeführt.A console window opens and then runs your app. 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.When you start a console app in Visual Studio, it runs your code, then prints "Press any key to close this window . .. .“." (Beliebige Taste zum Fortfahren drücken) zurück, damit Sie sich die Ausgabe ansehen können.to give you a chance to see the output. Herzlichen Glückwunsch!Congratulations! Sie haben Ihre erste „Hallo, Welt!“-You've created your first "Hello, world!" Konsolen-App in Visual Studio erstellt!console app in Visual Studio!

  3. Drücken Sie eine Taste, um das Konsolenfenster zu schließen, und kehren Sie zu Visual Studio zurück.Press a key to dismiss the console window and return to Visual Studio.

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.You now have the tools to build and run your app after every change, to verify that the code still works as you expect. Später erhalten Sie Informationen zum Debuggen, wenn Ihr Code nicht funktioniert.Later, we'll show you how to debug it if it doesn't.

Bearbeiten des CodesEdit the code

Wandeln Sie den Code in dieser Vorlage nun in eine Rechner-App um.Now let's turn the code in this template into a calculator app.

  1. Bearbeiten Sie in der Datei CalculatorTutorial.cpp den Code, sodass dieser dem folgenden Beispiel entspricht:In the CalculatorTutorial.cpp file, edit the code to match this example:

    // 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:Understanding the code:

    • Die #include-Anweisungen ermöglichen es Ihnen, auf Code zu verweisen, der sich in anderen Dateien befindet.The #include statements allow you to reference code located in other files. Manchmal kommt es vor, dass Sie einen Dateinamen sehen, der von spitzen Klammern ( <> ) eingeschlossen wird, manchmal wird er von Anführungszeichen ( " " ) eingeschlossen.Sometimes, you may see a filename surrounded by angle brackets (<>); other times, it's surrounded by quotes (" "). Generell werden spitze Klammern verwendet, wenn auf die C++-Standardbibliothek verwiesen wird, während Anführungszeichen für andere Dateien verwendet werden.In general, angle brackets are used when referencing the C++ Standard Library, while quotes are used for other files.
    • 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.The using namespace std; line tells the compiler to expect stuff from the C++ Standard Library to be used in this file. Ohne diese Zeile müsste vor jedem Stichwort aus der Bibliothek std:: stehen, um dessen Bereich anzuzeigen.Without this line, each keyword from the library would have to be preceded with a std::, to denote its scope. Ohne diese Zeile müsste beispielsweise jeder Verweis auf cout als std::cout geschrieben werden.For instance, without that line, each reference to cout would have to be written as std::cout. Die using-Anweisung wird hinzugefügt, um den Code übersichtlicher zu gestalten.The using statement is added to make the code look more clean.
    • Das Schlüsselwort cout wird verwendet, damit die Standardausgabe in C++ erfolgt.The cout keyword is used to print to standard output in C++. Der Operator << sagt dem Compiler, dass dieser alles, was rechts von ihm steht, an die Standardausgabe senden soll.The << operator tells the compiler to send whatever is to the right of it to the standard output.
    • Das Schlüsselwort endl ist ähnlich wie die Eingabetaste. Es beendet die Zeile und lässt den Cursor in die nächste Zeile springen.The endl keyword is like the Enter key; it ends the line and moves the cursor to the next line. Es hat sich aber noch mehr bewährt, innerhalb der Zeichenfolge mit demselben Effekt ein \n-Zeichen zu setzen (eingeschlossen von ""), da endl den Puffer immer leert und der Leistung des Programms schaden kann. Da es sich hier aber um eine kleine App handelt, wird stattdessen aus Gründen der besseren Lesbarkeit endl verwendet.It is a better practice to put a \n inside the string (contained by "") to do the same thing, as endl always flushes the buffer and can hurt the performance of the program, but since this is a very small app, endl is used instead for better readability.
    • Alle C++-Anweisungen müssen mit einem Semikolon enden, und alle C++-Anwendungen müssen eine main()-Funktion enthalten.All C++ statements must end with semicolons and all C++ applications must contain a main() function. Diese Funktion wird vom Programm zuerst ausgeführt.This function is what the program runs at the start. Die Funktion main() muss auf den ganzen Code zugreifen können, damit dieser verwendet werden kann.All code must be accessible from main() in order to be used.
  2. Wenn Sie die Datei speichern möchten, drücken Sie STRG+S, oder klicken Sie im oberen Bereich der IDE auf das Speichern-Symbol: das Diskettensymbol in der Symbolleiste unterhalb der Menüleiste.To save the file, enter Ctrl+S, or choose the Save icon near the top of the IDE, the floppy disk icon in the toolbar under the menu bar.

  3. Drücken Sie STRG+F5, um die Anwendung auszuführen, oder wechseln Sie zum Debuggen-Menü, und wählen Sie dort Ohne Debuggen starten aus.To run the application, press Ctrl+F5 or go to the Debug menu and choose Start Without Debugging. Es sollte nun ein Konsolenfenster mit dem im Code angegebenen Text angezeigt werden.You should see a console window appear that displays the text specified in the code.

  4. Schließen Sie das Konsolenfenster, sobald Sie fertig sind.Close the console window when you're done.

Hinzufügen von Code für BerechnungenAdd code to do some math

Jetzt können Sie mathematische Logik hinzufügen.It's time to add some math logic.

Hinzufügen einer RechnerklasseTo add a Calculator class

  1. Wechseln Sie zum Menü Projekt, und wählen Sie Klasse hinzufügen aus.Go to the Project menu and choose Add Class. Geben Sie im Eingabefeld für Klassenname den Namen Calculator (Taschenrechner) ein.In the Class Name edit box, enter Calculator. Klicken Sie auf OK.Choose OK. Zwei neue Dateien werden Ihrem Projekt hinzugefügt.Two new files get added to your project. Um alle geänderten Dateien auf einmal zu speichern, drücken Sie STRG+UMSCHALT+S.To save all your changed files at once, press Ctrl+Shift+S. Dies ist die Tastenkombination für Datei > Alle speichern.It's a keyboard shortcut for File > Save All. 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.There's also a toolbar button for Save All, an icon of two floppy disks, found beside the Save button. Generell hat es sich bewährt, Alle speichern häufig auszuführen, damit auch wirklich alle Dateien gespeichert werden.In general, it's good practice to do Save All frequently, so you don't miss any files when you save.

    Erstellen der Calculator-KlasseCreate the Calculator class

    Eine Klasse ist wie ein Entwurf für ein Objekt, das etwas tut.A class is like a blueprint for an object that does something. In diesem Fall soll ein Rechner und dessen Funktionsweise definiert werden.In this case, we define a calculator and how it should work. Der Assistent Klasse hinzufügen, den Sie oben verwendet haben, hat .h- und .cpp-Dateien erstellt, die denselben Namen wie die Klasse haben.The Add Class wizard you used above created .h and .cpp files that have the same name as the class. Im am Rand der IDE angezeigten Fenster Projektmappen-Explorer können Sie sich eine vollständige Liste Ihrer Projektdateien ansehen.You can see a full list of your project files in the Solution Explorer window, visible on the side of the IDE. Wenn das Fenster nicht angezeigt wird, können Sie es über die Menüleiste öffnen: Klicken Sie auf Ansicht > Projektmappen-Explorer.If the window isn't visible, you can open it from the menu bar: choose View > Solution Explorer.

    Projektmappen-ExplorerSolution Explorer

    Sie sollten in Editor nun drei Registerkarten geöffnet haben: CalculatorTutorial.cpp, Calculator.h und Calculator.cpp.You should now have three tabs open in the editor: CalculatorTutorial.cpp, Calculator.h, and Calculator.cpp. Wenn Sie eine davon versehentlich schließen, können Sie sie im Projektmappen-Explorer-Fenster jeweils mit einem Doppelklick auf die Datei wieder öffnen.If you accidentally close one of them, you can reopen it by double-clicking it in the Solution Explorer window.

  2. Entfernen Sie in Calculator.h die Zeilen Calculator(); und ~Calculator();, die erstellt wurden, jedoch nicht benötigt werden.In Calculator.h, remove the Calculator(); and ~Calculator(); lines that were generated, since you won't need them here. Fügen Sie dann die folgende Codezeile hinzu, sodass die Datei nun folgendermaßen aussieht:Next, add the following line of code so the file now looks like this:

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

    Grundlegendes zum CodeUnderstanding the code

    • Die Zeile, die Sie hinzugefügt haben, deklariert eine neue Funktion namens Calculate, die Sie verwenden, um mathematische Operationen für Addition, Subtraktion, Multiplikation und Division auszuführen.The line you added declares a new function called Calculate, which we'll use to run math operations for addition, subtraction, multiplication, and division.
    • C++-Code ist unterteilt in Headerdateien (.h) und Quelldateien (.cpp).C++ code is organized into header (.h) files and source (.cpp) files. Von verschiedenen Compilern werden auch noch andere Dateierweiterungen unterstützt; die eben vorgestellten sind aber die wichtigsten, die Sie kennen sollten.Several other file extensions are supported by various compilers, but these are the main ones to know about. 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.Functions and variables are normally declared, that is, given a name and a type, in header files, and implemented, or given a definition, in source files. 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.To access code defined in another file, you can use #include "filename.h", where 'filename.h' is the name of the file that declares the variables or functions you want to use.
    • Die zwei Zeilen, die Sie gelöscht haben, haben einen Konstruktor und einen Destruktor für die Klasse deklariert.The two lines you deleted declared a constructor and destructor for the class. Für eine einfache Klasse wie die vorliegende werden diese vom Compiler für Sie erstellt. Deren Verwendung liegt aber außerhalb des in diesem Tutorial abgedeckten Bereichs.For a simple class like this one, the compiler creates them for you, and their uses are beyond the scope of this tutorial.
    • 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.It's good practice to organize your code into different files based on what it does, so it's easy to find the code you need later. 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.In our case, we define the Calculator class separately from the file containing the main() function, but we plan to reference the Calculator class in main().
  3. Unter Calculate wird eine grüne Wellenlinie angezeigt.You'll see a green squiggle appear under Calculate. Dies liegt daran, dass die Calculate-Funktion in der CPP-Datei nicht definiert wurde.It's because we haven't defined the Calculate function in the .cpp file. Zeigen Sie mit dem Mauszeiger auf das Wort, und klicken Sie auf den angezeigten Schraubendreher und anschließend auf Create definition of 'Calculate' in Calculator.cpp (Definition von „Calculate“ in Calculator.cpp erstellen).Hover over the word, click the lightbulb (in this case, a screwdriver) that pops up, and choose Create definition of 'Calculate' in Calculator.cpp.

    Erstellen der Definition von CalculateCreate definition of Calculate

    Ein Popupelement wird angezeigt, das Ihnen eine Vorschau der Codeänderung anzeigt, die in der anderen Datei vorgenommen wurde.A pop-up appears that gives you a peek of the code change that was made in the other file. Der Code wurde Calculator.cpp hinzugefügt.The code was added to Calculator.cpp.

    Popupelement mit Definition von CalculatePop-up with definition of Calculate

    Momentan wird nur 0.0 zurückgegeben.Currently, it just returns 0.0. Ändern Sie das nun.Let's change that. Drücken Sie ESC, um das Popupelement zu schließen.Press Esc to close the pop-up.

  4. Wechseln Sie zur Calculator.cpp-Datei im Editorfenster.Switch to the Calculator.cpp file in the editor window. Entfernen Sie die Bereiche Calculator() und ~Calculator() (wie in der .h-Datei bereits geschehen), und fügen Sie Calculate() den folgenden Code hinzu:Remove the Calculator() and ~Calculator() sections (as you did in the .h file) and add the following code to Calculate():

    #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 CodeUnderstanding the 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.The function Calculate consumes a number, an operator, and a second number, then performs the requested operation on the numbers.
    • Die Switch-Anweisung überprüft, welcher Operator bereitgestellt wurde, und führt nur den für diese Operation entsprechenden Fall aus.The switch statement checks which operator was provided, and only executes the case corresponding to that operation. Der „default:“-Fall ist ein Fallback, falls der Benutzer einen Operator eingibt, der nicht akzeptiert wird, damit das Programm nicht unterbrochen wird.The default: case is a fallback in case the user types an operator that isn't accepted, so the program doesn't break. Allgemein wird mit ungültiger Benutzereingabe am besten auf elegantere Weise umgegangen. Dies würde für dieses Tutorial aber zu weit führen.In general, it's best to handle invalid user input in a more elegant way, but this is beyond the scope of this tutorial.
    • Das double-Schlüsselwort denotiert eine Zahlenart, die Dezimalzahlen unterstützt.The double keyword denotes a type of number that supports decimals. Auf diese Weise kann der Rechner sowohl Berechnungen mit Dezimalzahlen als auch mit ganzen Zahlen verarbeiten.This way, the calculator can handle both decimal math and integer math. 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.The Calculate function is required to always return such a number due to the double at the very start of the code (this denotes the function's return type), which is why we return 0.0 even in the default case.
    • 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.The .h file declares the function prototype, which tells the compiler upfront what parameters it requires, and what return type to expect from it. In der .cpp-Datei sind alle Implementierungsdetails der Funktion enthalten.The .cpp file has all the implementation details of the function.

Wenn Sie nun den Code noch einmal erstellen und ausführen, wird er nach der Aufforderung, den gewünschten Vorgang anzugeben, erneut beendet.If you build and run the code again at this point, it will still exit after asking which operation to perform. Bearbeiten Sie als nächsten Schritt die main-Funktion, um einige Berechnungen durchzuführen.Next, you'll modify the main function to do some calculations.

Aufrufen der Memberfunktionen der RechnerklasseTo call the Calculator class member functions

  1. Aktualisieren Sie nun die main-Funktion in CalculatorTutorial.cpp:Now let's update the main function 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 CodeUnderstanding the 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.Since C++ programs always start at the main() function, we need to call our other code from there, so a #include statement is needed.
    • 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.Some initial variables x, y, oper, and result are declared to store the first number, second number, operator, and final result, respectively. Es empfiehlt sich immer, einige anfängliche Variablen anzugeben, um nicht definiertes Verhalten zu vermeiden. Genau dies ist hier geschehen.It is always good practice to give them some initial values to avoid undefined behavior, which is what is done here.
    • Die Calculator c;-Zeile deklariert ein Objekt namens „c“ als Instanz der Calculator-Klasse.The Calculator c; line declares an object named 'c' as an instance of the Calculator class. Die Klasse selbst ist lediglich ein Entwurf dafür, wie der Rechner funktioniert. Das Objekt ist der spezifische Rechner, der die Berechnungen ausführt.The class itself is just a blueprint for how calculators work; the object is the specific calculator that does the math.
    • Die while (true)-Anweisung ist eine Schleife.The while (true) statement is a loop. Der Code innerhalb der Schleife wird wieder und wieder ausgeführt, so lange, bis die Bedingung innerhalb der () erfüllt ist.The code inside the loop continues to execute over and over again as long as the condition inside the () holds true. Da die Bedingung nur als true aufgeführt ist, ist sie immer wahr, die Schleife wird also ununterbrochen ausgeführt.Since the condition is simply listed as true, it's always true, so the loop runs forever. Um das Programm zu schließen, muss der Benutzer das Konsolenfenster manuell schließen.To close the program, the user must manually close the console window. Andernfalls wartet das Programm ständig auf eine neue Eingabe.Otherwise, the program always waits for new input.
    • Das cin-Schlüsselwort wird verwendet, um Benutzereingaben anzunehmen.The cin keyword is used to accept input from the user. 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.This input stream is smart enough to process a line of text entered in the console window and place it inside each of the variables listed, in order, assuming the user input matches the required specification. 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.You can modify this line to accept different types of input, for instance, more than two numbers, though the Calculate() function would also need to be updated to handle this.
    • Der c.Calculate(x, oper, y);-Ausdruck ruft die zuvor definierte Calculate-Funktion auf und stellt die eingegebenen Eingabewerte zur Verfügung.The c.Calculate(x, oper, y); expression calls the Calculate function defined earlier, and supplies the entered input values. Die Funktion gibt dann eine Zahl zurück, die in result gespeichert wird.The function then returns a number that gets stored in result.
    • Abschließend wird result in der Konsole ausgegeben, sodass der Benutzer das Ergebnis der Berechnung ansehen kann.Finally, result is printed to the console, so the user sees the result of the calculation.

Erneutes Erstellen und Testen des CodesBuild and test the code again

Testen Sie das Programm nun erneut, ob auch alles wie vorgesehen funktioniert.Now it's time to test the program again to make sure everything works properly.

  1. Drücken Sie STRG+F5, um die App neu zu erstellen und zu starten.Press Ctrl+F5 to rebuild and start the app.

  2. Geben Sie 5 + 5 ein, und drücken Sie die EINGABETASTE.Enter 5 + 5, and press Enter. Überprüfen Sie, ob das Ergebnis 10 ist.Verify that the result is 10.

    Das Ergebnis von 5 + 5The result of 5 + 5

Debuggen der AppDebug the app

Da es keine Beschränkungen gibt, was der Benutzer im Konsolenfenster eingeben kann, sorgen Sie nun dafür, dass der Rechner Eingaben wie erwartet verarbeitet.Since the user is free to type anything into the console window, let's make sure the calculator handles some input as expected. Anstatt das Programm auszuführen, debuggen Sie es, damit Sie sich ansehen können, wie genau das Programm Schritt für Schritt abläuft.Instead of running the program, let's debug it instead, so we can inspect what it's doing in detail, step-by-step.

Ausführen der App im DebuggerTo run the app in the debugger

  1. Setzen Sie auf der result = c.Calculate(x, oper, y);-Zeile einen Breakpoint, exakt nach dem Punkt, an dem der Benutzer zur Eingabe aufgefordert wurde.Set a breakpoint on the result = c.Calculate(x, oper, y); line, just after the user was asked for input. Um den Breakpoint festzulegen, klicken Sie auf der linken Seite des Editorfensters neben der Zeile auf den grauen, vertikalen Rand.To set the breakpoint, click next to the line in the gray vertical bar along the left edge of the editor window. Ein roter Punkt wird angezeigt.A red dot appears.

    Festlegen eines BreakpointsSet a breakpoint

    Ab sofort wird die Ausführung dann immer bei dieser Zeile angehalten, wenn Sie das Programm debuggen.Now when we debug the program, it always pauses execution at that line. Wir haben bereits eine grobe Vorstellung, dass das Programm in einfachen Fällen funktioniert.We already have a rough idea that the program works for simple cases. Da wir die Ausführung nicht jedes Mal anhalten möchten, legen wir den Breakpoint als bedingt fest.Since we don't want to pause execution every time, let's make the breakpoint conditional.

  2. Klicken Sie mit der rechten Maustaste auf den roten Punkt, der den Breakpoint darstellt, und wählen Sie dann Bedingungen aus.Right-click the red dot that represents the breakpoint, and choose Conditions. Geben Sie im Eingabefeld für die Bedingung (y == 0) && (oper == '/') ein.In the edit box for the condition, enter (y == 0) && (oper == '/'). Wenn Sie fertig sind, wählen Sie die Schaltfläche OK aus.Choose the Close button when you're done. Die Bedingung wird automatisch gespeichert.The condition is saved automatically.

    Festlegen eines bedingten BreakpointsSet a conditional breakpoint

    Die Ausführung wird nun also genau dann am Breakpoint angehalten, wenn versucht wird, durch 0 zu teilen.Now we pause execution at the breakpoint specifically if a division by 0 is attempted.

  3. Drücken Sie F5, um das Programm zu debuggen, oder wählen Sie die Schaltfläche Lokaler Windows-Debugger mit dem grünen Pfeilsymbol auf der Symbolleiste aus.To debug the program, press F5, or choose the Local Windows Debugger toolbar button that has the green arrow icon. Wenn Sie in Ihrer Konsolen-App z. B. „5 - 0“ eingeben, verhält sich das Programm normal und wird weiter ausgeführt.In your console app, if you enter something like "5 - 0", the program behaves normally and keeps running. Wenn Sie nun jedoch „10 / 0“ eingeben, hält das Programm am Breakpoint an.However, if you type "10 / 0", it pauses at the breakpoint. Auch wenn Sie eine beliebige Anzahl von Leerzeichen zwischen dem Operator und den Zahlen einfügen, ist cin intelligent genug, die Eingabe korrekt zu analysieren.You can even put any number of spaces between the operator and numbers: cin is smart enough to parse the input appropriately.

    Anhalten am bedingten BreakpointPause at the conditional breakpoint

Nützliche Fenster im DebuggerUseful windows in the debugger

Sobald Sie Ihren Code debuggen, können Sie feststellen, dass ein paar neue Fenster angezeigt werden.Whenever you debug your code, you may notice that some new windows appear. Diese Fenster unterstützen Sie beim Debuggen.These windows can assist your debugging experience. Sehen Sie sich das Fenster Auto an.Take a look at the Autos window. Im Fenster Auto sehen Sie die aktuellen Werte der Variablen, die mindestens in den letzten drei Zeilen und bis zur aktuellen Zeile verwendet wurden.The Autos window shows you the current values of variables used at least three lines before and up to the current line. Wenn Sie alle Variablen dieser Funktion ansehen möchten, wechseln Sie zum Fenster Lokale.To see all of the variables from that function, switch to the Locals window. Tatsächlich können Sie die Werte dieser Variablen während des Debuggens bearbeiten, um zu erfahren, welche Auswirkung sie auf das Programm haben würden.You can actually modify the values of these variables while debugging, to see what effect they would have on the program. Hier bearbeiten Sie die Variablen jedoch nicht.In this case, we'll leave them alone.

Fenster „Lokale Variablen“The Locals window

Sie können auch einfach direkt im Code den Mauszeiger auf Variablen bewegen, um deren aktuelle Werte an den Stellen anzeigen zu lassen, an denen die Ausführung jeweils pausiert wurde.You can also just hover over variables in the code itself to see their current values where the execution is currently paused. Sorgen Sie dafür, dass sich das Editorfenster im Vordergrund befindet, indem Sie darauf klicken, bevor Sie diesen Vorgang testen.Make sure the editor window is in focus by clicking on it first.

Daraufzeigen zur Anzeige der aktuellen VariablenwerteHover to view current variable values

Fortsetzen mit dem DebuggenTo continue debugging

  1. In der gelben Zeile auf der linken Seite wird der aktuelle Stand der Ausführung angezeigt.The yellow line on the left shows the current point of execution. Die aktuelle Zeile ruft Calculate auf. Drücken Sie also F11, um einen Einzelschritt in der Funktion auszuführen.The current line calls Calculate, so press F11 to Step Into the function. Dadurch wechseln Sie zum Text der Calculate-Funktion.You'll find yourself in the body of the Calculate function. Wenden Sie den Einzelschritt mit Bedacht an; wenn Sie dies zu oft tun, verschwenden Sie unter Umständen viel Zeit.Be careful with Step Into; if you do it too much, you may waste a lot of time. Sie gehen damit in jeden Code, den Sie in der Zeile verwenden, einschließlich der standardmäßigen Bibliotheksfunktionen.It goes into any code you use on the line you are on, including standard library functions.

  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.Now that the point of execution is at the start of the Calculate function, press F10 to move to the next line in the program's execution. F10 wird auch als Prozedurschritt bezeichnet.F10 is also known as Step Over. Sie können die Option Überspringen verwenden, um von Zeile zu Zeile zu springen, ohne dabei genau die Details jedes Teils der Zeile anzusehen.You can use Step Over to move from line to line, without delving into the details of what is occurring in each part of the line. 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.In general you should use Step Over instead of Step Into, unless you want to dive more deeply into code that is being called from elsewhere (as you did to reach the body of Calculate).

  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.Continue using F10 to Step Over each line until you get back to the main() function in the other file, and stop on the cout line.

    Es scheint, das Programm funktioniert wie erwartet: Es nimmt die erste Zahl und dividiert sie durch die zweite.It looks like the program is doing what is expected: it takes the first number, and divides it by the second. Bewegen Sie in der cout-Zeile den Mauszeiger über die Variable result, oder sehen Sie sich result im Fenster Auto an.On the cout line, hover over the result variable or take a look at result in the Autos window. Sie sehen, dass der Wert als „inf“ aufgelistet ist, was offenbar falsch ist, also korrigieren wir dies.You'll see its value is listed as "inf", which doesn't look right, so let's fix it. 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:The cout line just outputs whatever value is stored in result, so when you step one more line forward using F10, the console window displays:

    Das Ergebnis der Division durch 0The result of divide by zero

    Dieses Ergebnis resultiert daraus, dass die Division durch Null (0) nicht definiert ist. Das Programm hat also keine numerische Antwort für die angeforderte Operation.This result happens because division by zero is undefined, so the program doesn't have a numerical answer to the requested operation.

Beheben des Fehlers „Division durch Null“To fix the "divide by zero" error

Entwickeln Sie eine elegantere Lösung für die Division durch Null, damit der Benutzer das Problem auch versteht.Let's handle division by zero more gracefully, so a user can understand the problem.

  1. Nehmen Sie in CalculatorTutorial.cpp die folgenden Änderungen vor.Make the following changes in CalculatorTutorial.cpp. Dank eines Debuggerfeatures namens Bearbeiten und Fortfahren kann das Programm weiter ausgeführt werden, während Sie Änderungen vornehmen:(You can leave the program running as you edit, thanks to a debugger feature called Edit and Continue):

    // 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 nun einmal F5.Now press F5 once. Die Programmausführung wird ordnungsgemäß fortgeführt, bis das Programm pausiert, um eine Benutzereingabe anzufordern.Program execution continues all the way until it has to pause to ask for user input. Geben Sie noch einmal 10 / 0 ein.Enter 10 / 0 again. Nun wird eine hilfreichere Antwort ausgegeben.Now, a more helpful message is printed. Der Benutzer wird zu weiterer Eingabe aufgefordert, und das Programm wird weiter normal ausgeführt.The user is asked for more input, and the program continues executing normally.

    Das Endergebnis nach den ÄnderungenThe final result after changes

    Hinweis

    Wenn Sie Code bearbeiten, während sich das Programm im Debugmodus befindet, besteht die Gefahr, dass der Code veraltet.When you edit code while in debugging mode, there is a risk of code becoming stale. Dies geschieht, wenn der Debugger noch Ihren alten Code ausführt, und Ihre Änderungen noch nicht übernommen wurden.This happens when the debugger is still running your old code, and has not yet updated it with your changes. In so einem Fall werden Sie durch eine Popupmeldung vom Debugger informiert.The debugger pops up a dialog to inform you when this happens. Gelegentlich sollten Sie F5 drücken, um den gerade ausgeführten Code zu aktualisieren.Sometimes, you may need to press F5 to refresh the code being executed. Insbesondere wenn Sie eine Änderung in einer Funktion vornehmen, während sich der Ausführungspunkt innerhalb genau dieser Funktion befindet, müssen Sie einen Prozedurschritt aus dieser Funktion vornehmen, und danach wieder in die Funktion hineinspringen, um den aktualisierten Code zu erhalten.In particular, if you make a change inside a function while the point of execution is inside that function, you'll need to step out of the function, then back into it again to get the updated code. 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.If that doesn't work for some reason and you see an error message, you can stop debugging by clicking on the red square in the toolbar under the menus at the top of the IDE, then start debugging again by entering F5 or by choosing the green "play" arrow beside the stop button on the toolbar.

    Grundlegendes zu den Tastenkombinationen zum Ausführen und DebuggenUnderstanding the Run and Debug shortcuts

    • 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.F5 (or Debug > Start Debugging) starts a debugging session if one isn't already active, and runs the program until a breakpoint is hit or the program needs user input. 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.If no user input is needed and no breakpoint is available to hit, the program terminates and the console window closes itself when the program finishes running. Wenn ein „Hallo Welt“- oder ein ähnliches Programm ausgeführt werden soll, verwenden Sie STRG+F5 oder legen einen Breakpoint fest, bevor Sie F5 drücken, damit das Fenster nicht geschlossen wird.If you have something like a "Hello World" program to run, use Ctrl+F5 or set a breakpoint before you enter F5 to keep the window open.
    • Mit STRG+F5 bzw. Debuggen > Ohne Debuggen starten wird die Anwendung ausgeführt, ohne dass der Debugmodus gestartet wird.Ctrl+F5 (or Debug > Start Without Debugging) runs the application without going into debug mode. Dies benötigt etwas weniger Zeit als das Debuggen, und das Konsolenfenster bleibt geöffnet, nachdem das Programm die Ausführung beendet hat.This is slightly faster than debugging, and the console window stays open after the program finishes executing.
    • 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.F10 (known as Step Over) lets you iterate through code, line-by-line, and visualize how the code is run and what variable values are at each step of execution.
    • F11 bzw. Hineinspringen funktioniert ähnlich wie Überspringen. Allerdings wird hierbei in jede Funktion hineingesprungen, die auf der jeweiligen Ausführungszeile aufgerufen wird.F11 (known as Step Into) works similarly to Step Over, except it steps into any functions called on the line of execution. 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.For example, if the line being executed calls a function, pressing F11 moves the pointer into the body of the function, so you can follow the function's code being run before coming back to the line you started at. 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.Pressing F10 steps over the function call and just moves to the next line; the function call still happens, but the program doesn't pause to show you what it's doing.

Schließen der AppClose the app

  • Wenn die Ausführung noch nicht beendet ist, schließen Sie das Konsolenfenster für die Rechner-App.If it's still running, close the console window for the calculator app.

Die fertige AppThe finished app

Herzlichen Glückwunsch!Congratulations! Sie haben den Code für die Rechner-App fertiggestellt, und diese in Visual Studio erstellt und debuggt.You've completed the code for the calculator app, and built and debugged it in Visual Studio.

Nächste SchritteNext steps

Weitere Informationen zu Visual Studio für C++Learn more about Visual Studio for C++

C++-Programmierer beginnen häufig mit einer „Hallo, Welt!“-The usual starting point for a C++ programmer is a "Hello, world!" Anwendung, die über die Befehlszeile ausgeführt wird.application that runs on the command line. Eine solche Anwendung erstellen Sie mithilfe dieses Artikels in Visual Studio. Anschließend beschäftigen Sie sich mit einer etwas schwierigeren Aufgabe: der Erstellung einer Taschenrechner-App.That's what you'll create in Visual Studio in this article, and then we'll move on to something more challenging: a calculator app.

VoraussetzungenPrerequisites

Erstellen Ihres App-ProjektsCreate your app project

Visual Studio verwendet Projekte, um Code für eine App zu ordnen, und Projektmappen, um Ihre Projekte zu ordnen.Visual Studio uses projects to organize the code for an app, and solutions to organize your projects. Ein Projekt beinhaltet alle Optionen, Einstellungen und Regeln, die Sie zum Erstellen Ihrer Anwendung verwendet haben.A project contains all the options, configurations, and rules used to build your apps. Es verwaltet auch die Beziehungen zwischen allen Projektdateien und externen Dateien.It also manages the relationship between all the project's files and any external files. Wenn Sie Ihre App erstellen möchten, müssen Sie zuerst ein neues Projekt und eine Projektmappe erstellen.To create your app, first, you'll create a new project and solution.

  1. Klicken Sie in der Menüleiste in Visual Studio auf Datei > Neu > Projekt.On the menubar in Visual Studio, choose File > New > Project. Das Fenster Neues Projekt wird angezeigt.The New Project window opens.

  2. Prüfen Sie auf der linken Randleiste, ob Visual C++ ausgewählt ist.On the left sidebar, make sure Visual C++ is selected. Wählen Sie im mittleren Bereich Windows-Konsolenanwendung aus.In the center, choose Windows Console Application.

  3. Geben Sie unten im Eingabefeld Name den Begriff CalculatorTutorial als Name für das neue Projekt ein, und klicken Sie dann auf OK.In the Name edit box at the bottom, name the new project CalculatorTutorial, then choose OK.

    Das Dialogfeld „Neues Projekt“The New Project dialog

    Eine leere C++-Windows-Konsolenanwendung wird erstellt.An empty C++ Windows console application gets created. Konsolenanwendungen verwenden ein Windows-Konsolenfenster, um Ausgabe anzuzeigen und Benutzereingaben entgegenzunehmen.Console applications use a Windows console window to display output and accept user input. In Visual Studio wird ein Editorfenster geöffnet und der generierte Code angezeigt:In Visual Studio, an editor window opens and shows the generated code:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include "pch.h"
    #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 wirdVerify that your new app builds and runs

Die Vorlage für eine neue Windows-Konsolenanwendung erstellt eine einfache C++-„Hallo Welt“-App.The template for a new windows console application creates a simple C++ "Hello World" 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.At this point, you can see how Visual Studio builds and runs the apps you create right from the IDE.

  1. Wählen Sie zum Erstellen Ihres Projekts aus dem Menü Erstellen die Option Projektmappe erstellen aus.To build your project, choose Build Solution from the Build menu. Im Fenster Ausgabe wird das Ergebnis des Erstellungsprozess angezeigt.The Output window shows the results of the build process.

    Erstellen des ProjektsBuild the project

  2. Klicken Sie zum Ausführen des Codes auf der Menüleiste auf Debuggen > Ohne Debuggen starten.To run the code, on the menu bar, choose Debug, Start without debugging.

    Starten des ProjektsStart the project

    Ein Konsolenfenster wird geöffnet, und Ihre App daraufhin ausgeführt.A console window opens and then runs your app. Wenn Sie eine Konsolen-App in Visual Studio starten, führt diese Ihren Code aus und gibt dann „Press any key to continueWhen you start a console app in Visual Studio, it runs your code, then prints "Press any key to continue . .. .“." (Beliebige Taste zum Fortfahren drücken) zurück, damit Sie sich die Ausgabe ansehen können.to give you a chance to see the output. Herzlichen Glückwunsch!Congratulations! Sie haben Ihre erste „Hallo, Welt!“-You've created your first "Hello, world!" Konsolen-App in Visual Studio erstellt!console app in Visual Studio!

  3. Drücken Sie eine Taste, um das Konsolenfenster zu schließen, und kehren Sie zu Visual Studio zurück.Press a key to dismiss the console window and return to Visual Studio.

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.You now have the tools to build and run your app after every change, to verify that the code still works as you expect. Später erhalten Sie Informationen zum Debuggen, wenn Ihr Code nicht funktioniert.Later, we'll show you how to debug it if it doesn't.

Bearbeiten des CodesEdit the code

Wandeln Sie den Code in dieser Vorlage nun in eine Rechner-App um.Now let's turn the code in this template into a calculator app.

  1. Bearbeiten Sie in der Datei CalculatorTutorial.cpp den Code, sodass dieser dem folgenden Beispiel entspricht:In the CalculatorTutorial.cpp file, edit the code to match this example:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include "pch.h"
    #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:Understanding the code:

    • Die #include-Anweisungen ermöglichen es Ihnen, auf Code zu verweisen, der sich in anderen Dateien befindet.The #include statements allow you to reference code located in other files. Manchmal kommt es vor, dass Sie einen Dateinamen sehen, der von spitzen Klammern ( <> ) eingeschlossen wird, manchmal wird er von Anführungszeichen ( " " ) eingeschlossen.Sometimes, you may see a filename surrounded by angle brackets (<>); other times, it's surrounded by quotes (" "). Generell werden spitze Klammern verwendet, wenn auf die C++-Standardbibliothek verwiesen wird, während Anführungszeichen für andere Dateien verwendet werden.In general, angle brackets are used when referencing the C++ Standard Library, while quotes are used for other files.
    • Die #include "pch.h"-Zeile (bzw. die #include "stdafx.h"-Zeile in Visual Studio 2017 und früher) verweist auf etwas, das als vorkompilierter Header bezeichnet wird.The #include "pch.h" (or in Visual Studio 2017 and earlier, #include "stdafx.h") line references something known as a precompiled header. Diese werden oft von professionellen Programmierern verwendet, um Kompilierungszeiten zu verbessern. Für dieses Tutorial wären das aber schon zu weit gegriffen.These are often used by professional programmers to improve compilation times, but they are beyond the scope of this tutorial.
    • 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.The using namespace std; line tells the compiler to expect stuff from the C++ Standard Library to be used in this file. Ohne diese Zeile müsste vor jedem Stichwort aus der Bibliothek std:: stehen, um dessen Bereich anzuzeigen.Without this line, each keyword from the library would have to be preceded with a std::, to denote its scope. Ohne diese Zeile müsste beispielsweise jeder Verweis auf cout als std::cout geschrieben werden.For instance, without that line, each reference to cout would have to be written as std::cout. Die using-Anweisung wird hinzugefügt, um den Code übersichtlicher zu gestalten.The using statement is added to make the code look more clean.
    • Das Schlüsselwort cout wird verwendet, damit die Standardausgabe in C++ erfolgt.The cout keyword is used to print to standard output in C++. Der Operator << sagt dem Compiler, dass dieser alles, was rechts von ihm steht, an die Standardausgabe senden soll.The << operator tells the compiler to send whatever is to the right of it to the standard output.
    • Das Schlüsselwort endl ist ähnlich wie die Eingabetaste. Es beendet die Zeile und lässt den Cursor in die nächste Zeile springen.The endl keyword is like the Enter key; it ends the line and moves the cursor to the next line. Es hat sich aber noch mehr bewährt, innerhalb der Zeichenfolge mit demselben Effekt ein \n-Zeichen zu setzen (eingeschlossen von ""), da endl den Puffer immer leert und der Leistung des Programms schaden kann. Da es sich hier aber um eine kleine App handelt, wird stattdessen aus Gründen der besseren Lesbarkeit endl verwendet.It is a better practice to put a \n inside the string (contained by "") to do the same thing, as endl always flushes the buffer and can hurt the performance of the program, but since this is a very small app, endl is used instead for better readability.
    • Alle C++-Anweisungen müssen mit einem Semikolon enden, und alle C++-Anwendungen müssen eine main()-Funktion enthalten.All C++ statements must end with semicolons and all C++ applications must contain a main() function. Diese Funktion wird vom Programm zuerst ausgeführt.This function is what the program runs at the start. Die Funktion main() muss auf den ganzen Code zugreifen können, damit dieser verwendet werden kann.All code must be accessible from main() in order to be used.
  2. Wenn Sie die Datei speichern möchten, drücken Sie STRG+S, oder klicken Sie im oberen Bereich der IDE auf das Speichern-Symbol: das Diskettensymbol in der Symbolleiste unterhalb der Menüleiste.To save the file, enter Ctrl+S, or choose the Save icon near the top of the IDE, the floppy disk icon in the toolbar under the menu bar.

  3. Drücken Sie STRG+F5, um die Anwendung auszuführen, oder wechseln Sie zum Debuggen-Menü, und wählen Sie dort Ohne Debuggen starten aus.To run the application, press Ctrl+F5 or go to the Debug menu and choose Start Without Debugging. Wenn ein Popupelement mit der Meldung Dieses Projekt ist nicht mehr aktuell angezeigt wird, können Sie Dieses Dialogfeld nicht mehr anzeigen auswählen, und dann Ja, um Ihre Anwendung zu erstellen.If you get a pop-up that says This project is out of date, you may select Do not show this dialog again, and then choose Yes to build your application. Es sollte nun ein Konsolenfenster mit dem im Code angegebenen Text angezeigt werden.You should see a console window appear that displays the text specified in the code.

    Erstellen und Starten der AnwendungBuild and start your application

  4. Schließen Sie das Konsolenfenster, sobald Sie fertig sind.Close the console window when you're done.

Hinzufügen von Code für BerechnungenAdd code to do some math

Jetzt können Sie mathematische Logik hinzufügen.It's time to add some math logic.

Hinzufügen einer RechnerklasseTo add a Calculator class

  1. Wechseln Sie zum Menü Projekt, und wählen Sie Klasse hinzufügen aus.Go to the Project menu and choose Add Class. Geben Sie im Eingabefeld für Klassenname den Namen Calculator (Taschenrechner) ein.In the Class Name edit box, enter Calculator. Klicken Sie auf OK.Choose OK. Zwei neue Dateien werden Ihrem Projekt hinzugefügt.Two new files get added to your project. Um alle geänderten Dateien auf einmal zu speichern, drücken Sie STRG+UMSCHALT+S.To save all your changed files at once, press Ctrl+Shift+S. Dies ist die Tastenkombination für Datei > Alle speichern.It's a keyboard shortcut for File > Save All. 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.There's also a toolbar button for Save All, an icon of two floppy disks, found beside the Save button. Generell hat es sich bewährt, Alle speichern häufig auszuführen, damit auch wirklich alle Dateien gespeichert werden.In general, it's good practice to do Save All frequently, so you don't miss any files when you save.

    Erstellen der Calculator-KlasseCreate the Calculator class

    Eine Klasse ist wie ein Entwurf für ein Objekt, das etwas tut.A class is like a blueprint for an object that does something. In diesem Fall soll ein Rechner und dessen Funktionsweise definiert werden.In this case, we define a calculator and how it should work. Der Assistent Klasse hinzufügen, den Sie oben verwendet haben, hat .h- und .cpp-Dateien erstellt, die denselben Namen wie die Klasse haben.The Add Class wizard you used above created .h and .cpp files that have the same name as the class. Im am Rand der IDE angezeigten Fenster Projektmappen-Explorer können Sie sich eine vollständige Liste Ihrer Projektdateien ansehen.You can see a full list of your project files in the Solution Explorer window, visible on the side of the IDE. Wenn das Fenster nicht angezeigt wird, können Sie es über die Menüleiste öffnen: Klicken Sie auf Ansicht > Projektmappen-Explorer.If the window isn't visible, you can open it from the menu bar: choose View > Solution Explorer.

    Projektmappen-ExplorerSolution Explorer

    Sie sollten in Editor nun drei Registerkarten geöffnet haben: CalculatorTutorial.cpp, Calculator.h und Calculator.cpp.You should now have three tabs open in the editor: CalculatorTutorial.cpp, Calculator.h, and Calculator.cpp. Wenn Sie eine davon versehentlich schließen, können Sie sie im Projektmappen-Explorer-Fenster jeweils mit einem Doppelklick auf die Datei wieder öffnen.If you accidentally close one of them, you can reopen it by double-clicking it in the Solution Explorer window.

  2. Entfernen Sie in Calculator.h die Zeilen Calculator(); und ~Calculator();, die erstellt wurden, jedoch nicht benötigt werden.In Calculator.h, remove the Calculator(); and ~Calculator(); lines that were generated, since you won't need them here. Fügen Sie dann die folgende Codezeile hinzu, sodass die Datei nun folgendermaßen aussieht:Next, add the following line of code so the file now looks like this:

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

    Grundlegendes zum CodeUnderstanding the code

    • Die Zeile, die Sie hinzugefügt haben, deklariert eine neue Funktion namens Calculate, die Sie verwenden, um mathematische Operationen für Addition, Subtraktion, Multiplikation und Division auszuführen.The line you added declares a new function called Calculate, which we'll use to run math operations for addition, subtraction, multiplication, and division.
    • C++-Code ist unterteilt in Headerdateien (.h) und Quelldateien (.cpp).C++ code is organized into header (.h) files and source (.cpp) files. Von verschiedenen Compilern werden auch noch andere Dateierweiterungen unterstützt; die eben vorgestellten sind aber die wichtigsten, die Sie kennen sollten.Several other file extensions are supported by various compilers, but these are the main ones to know about. 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.Functions and variables are normally declared, that is, given a name and a type, in header files, and implemented, or given a definition, in source files. 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.To access code defined in another file, you can use #include "filename.h", where 'filename.h' is the name of the file that declares the variables or functions you want to use.
    • Die zwei Zeilen, die Sie gelöscht haben, haben einen Konstruktor und einen Destruktor für die Klasse deklariert.The two lines you deleted declared a constructor and destructor for the class. Für eine einfache Klasse wie die vorliegende werden diese vom Compiler für Sie erstellt. Deren Verwendung liegt aber außerhalb des in diesem Tutorial abgedeckten Bereichs.For a simple class like this one, the compiler creates them for you, and their uses are beyond the scope of this tutorial.
    • 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.It's good practice to organize your code into different files based on what it does, so it's easy to find the code you need later. 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.In our case, we define the Calculator class separately from the file containing the main() function, but we plan to reference the Calculator class in main().
  3. Unter Calculate wird eine grüne Wellenlinie angezeigt.You'll see a green squiggle appear under Calculate. Dies liegt daran, dass die Calculate-Funktion in der CPP-Datei nicht definiert wurde.It's because we haven't defined the Calculate function in the .cpp file. Bewegen Sie den Mauszeiger über das Wort, klicken Sie dann auf die Glühbirne, die angezeigt wird, und wählen Sie dann Create definition of „Calculate“ in Calculator.cpp (Definition von „Calculate“ in Calculator.cpp erstellen).Hover over the word, click the lightbulb that pops up, and choose Create definition of 'Calculate' in Calculator.cpp. Ein Popupelement wird angezeigt, das Ihnen eine Vorschau der Codeänderung anzeigt, die in der anderen Datei vorgenommen wurde.A pop-up appears that gives you a peek of the code change that was made in the other file. Der Code wurde Calculator.cpp hinzugefügt.The code was added to Calculator.cpp.

    Erstellen der Definition von CalculateCreate definition of Calculate

    Momentan wird nur 0.0 zurückgegeben.Currently, it just returns 0.0. Ändern Sie das nun.Let's change that. Drücken Sie ESC, um das Popupelement zu schließen.Press Esc to close the pop-up.

  4. Wechseln Sie zur Calculator.cpp-Datei im Editorfenster.Switch to the Calculator.cpp file in the editor window. Entfernen Sie die Bereiche Calculator() und ~Calculator() (wie in der .h-Datei bereits geschehen), und fügen Sie Calculate() den folgenden Code hinzu:Remove the Calculator() and ~Calculator() sections (as you did in the .h file) and add the following code to Calculate():

    #include "pch.h"
    #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 CodeUnderstanding the 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.The function Calculate consumes a number, an operator, and a second number, then performs the requested operation on the numbers.
    • Die Switch-Anweisung überprüft, welcher Operator bereitgestellt wurde, und führt nur den für diese Operation entsprechenden Fall aus.The switch statement checks which operator was provided, and only executes the case corresponding to that operation. Der „default:“-Fall ist ein Fallback, falls der Benutzer einen Operator eingibt, der nicht akzeptiert wird, damit das Programm nicht unterbrochen wird.The default: case is a fallback in case the user types an operator that isn't accepted, so the program doesn't break. Allgemein wird mit ungültiger Benutzereingabe am besten auf elegantere Weise umgegangen. Dies würde für dieses Tutorial aber zu weit führen.In general, it's best to handle invalid user input in a more elegant way, but this is beyond the scope of this tutorial.
    • Das double-Schlüsselwort denotiert eine Zahlenart, die Dezimalzahlen unterstützt.The double keyword denotes a type of number that supports decimals. Auf diese Weise kann der Rechner sowohl Berechnungen mit Dezimalzahlen als auch mit ganzen Zahlen verarbeiten.This way, the calculator can handle both decimal math and integer math. 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.The Calculate function is required to always return such a number due to the double at the very start of the code (this denotes the function's return type), which is why we return 0.0 even in the default case.
    • 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.The .h file declares the function prototype, which tells the compiler upfront what parameters it requires, and what return type to expect from it. In der .cpp-Datei sind alle Implementierungsdetails der Funktion enthalten.The .cpp file has all the implementation details of the function.

Wenn Sie nun den Code noch einmal erstellen und ausführen, wird er nach der Aufforderung, den gewünschten Vorgang anzugeben, erneut beendet.If you build and run the code again at this point, it will still exit after asking which operation to perform. Bearbeiten Sie als nächsten Schritt die main-Funktion, um einige Berechnungen durchzuführen.Next, you'll modify the main function to do some calculations.

Aufrufen der Memberfunktionen der RechnerklasseTo call the Calculator class member functions

  1. Aktualisieren Sie nun die main-Funktion in CalculatorTutorial.cpp:Now let's update the main function in CalculatorTutorial.cpp:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include "pch.h"
    #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 CodeUnderstanding the 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.Since C++ programs always start at the main() function, we need to call our other code from there, so a #include statement is needed.
    • 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.Some initial variables x, y, oper, and result are declared to store the first number, second number, operator, and final result, respectively. Es empfiehlt sich immer, einige anfängliche Variablen anzugeben, um nicht definiertes Verhalten zu vermeiden. Genau dies ist hier geschehen.It is always good practice to give them some initial values to avoid undefined behavior, which is what is done here.
    • Die Calculator c;-Zeile deklariert ein Objekt namens „c“ als Instanz der Calculator-Klasse.The Calculator c; line declares an object named 'c' as an instance of the Calculator class. Die Klasse selbst ist lediglich ein Entwurf dafür, wie der Rechner funktioniert. Das Objekt ist der spezifische Rechner, der die Berechnungen ausführt.The class itself is just a blueprint for how calculators work; the object is the specific calculator that does the math.
    • Die while (true)-Anweisung ist eine Schleife.The while (true) statement is a loop. Der Code innerhalb der Schleife wird wieder und wieder ausgeführt, so lange, bis die Bedingung innerhalb der () erfüllt ist.The code inside the loop continues to execute over and over again as long as the condition inside the () holds true. Da die Bedingung nur als true aufgeführt ist, ist sie immer wahr, die Schleife wird also ununterbrochen ausgeführt.Since the condition is simply listed as true, it's always true, so the loop runs forever. Um das Programm zu schließen, muss der Benutzer das Konsolenfenster manuell schließen.To close the program, the user must manually close the console window. Andernfalls wartet das Programm ständig auf eine neue Eingabe.Otherwise, the program always waits for new input.
    • Das cin-Schlüsselwort wird verwendet, um Benutzereingaben anzunehmen.The cin keyword is used to accept input from the user. 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.This input stream is smart enough to process a line of text entered in the console window and place it inside each of the variables listed, in order, assuming the user input matches the required specification. 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.You can modify this line to accept different types of input, for instance, more than two numbers, though the Calculate() function would also need to be updated to handle this.
    • Der c.Calculate(x, oper, y);-Ausdruck ruft die zuvor definierte Calculate-Funktion auf und stellt die eingegebenen Eingabewerte zur Verfügung.The c.Calculate(x, oper, y); expression calls the Calculate function defined earlier, and supplies the entered input values. Die Funktion gibt dann eine Zahl zurück, die in result gespeichert wird.The function then returns a number that gets stored in result.
    • Abschließend wird result in der Konsole ausgegeben, sodass der Benutzer das Ergebnis der Berechnung ansehen kann.Finally, result is printed to the console, so the user sees the result of the calculation.

Erneutes Erstellen und Testen des CodesBuild and test the code again

Testen Sie das Programm nun erneut, ob auch alles wie vorgesehen funktioniert.Now it's time to test the program again to make sure everything works properly.

  1. Drücken Sie STRG+F5, um die App neu zu erstellen und zu starten.Press Ctrl+F5 to rebuild and start the app.

  2. Geben Sie 5 + 5 ein, und drücken Sie die EINGABETASTE.Enter 5 + 5, and press Enter. Überprüfen Sie, ob das Ergebnis 10 ist.Verify that the result is 10.

    Das Ergebnis von 5 + 5The result of 5 + 5

Debuggen der AppDebug the app

Da es keine Beschränkungen gibt, was der Benutzer im Konsolenfenster eingeben kann, sorgen Sie nun dafür, dass der Rechner Eingaben wie erwartet verarbeitet.Since the user is free to type anything into the console window, let's make sure the calculator handles some input as expected. Anstatt das Programm auszuführen, debuggen Sie es, damit Sie sich ansehen können, wie genau das Programm Schritt für Schritt abläuft.Instead of running the program, let's debug it instead, so we can inspect what it's doing in detail, step-by-step.

Ausführen der App im DebuggerTo run the app in the debugger

  1. Setzen Sie auf der result = c.Calculate(x, oper, y);-Zeile einen Breakpoint, exakt nach dem Punkt, an dem der Benutzer zur Eingabe aufgefordert wurde.Set a breakpoint on the result = c.Calculate(x, oper, y); line, just after the user was asked for input. Um den Breakpoint festzulegen, klicken Sie auf der linken Seite des Editorfensters neben der Zeile auf den grauen, vertikalen Rand.To set the breakpoint, click next to the line in the gray vertical bar along the left edge of the editor window. Ein roter Punkt wird angezeigt.A red dot appears.

    Festlegen eines BreakpointsSet a breakpoint

    Ab sofort wird die Ausführung dann immer bei dieser Zeile angehalten, wenn Sie das Programm debuggen.Now when we debug the program, it always pauses execution at that line. Wir haben bereits eine grobe Vorstellung, dass das Programm in einfachen Fällen funktioniert.We already have a rough idea that the program works for simple cases. Da wir die Ausführung nicht jedes Mal anhalten möchten, legen wir den Breakpoint als bedingt fest.Since we don't want to pause execution every time, let's make the breakpoint conditional.

  2. Klicken Sie mit der rechten Maustaste auf den roten Punkt, der den Breakpoint darstellt, und wählen Sie dann Bedingungen aus.Right-click the red dot that represents the breakpoint, and choose Conditions. Geben Sie im Eingabefeld für die Bedingung (y == 0) && (oper == '/') ein.In the edit box for the condition, enter (y == 0) && (oper == '/'). Wenn Sie fertig sind, wählen Sie die Schaltfläche OK aus.Choose the Close button when you're done. Die Bedingung wird automatisch gespeichert.The condition is saved automatically.

    Festlegen eines bedingten BreakpointsSet a conditional breakpoint

    Die Ausführung wird nun also genau dann am Breakpoint angehalten, wenn versucht wird, durch 0 zu teilen.Now we pause execution at the breakpoint specifically if a division by 0 is attempted.

  3. Drücken Sie F5, um das Programm zu debuggen, oder wählen Sie die Schaltfläche Lokaler Windows-Debugger mit dem grünen Pfeilsymbol auf der Symbolleiste aus.To debug the program, press F5, or choose the Local Windows Debugger toolbar button that has the green arrow icon. Wenn Sie in Ihrer Konsolen-App z. B. „5 - 0“ eingeben, verhält sich das Programm normal und wird weiter ausgeführt.In your console app, if you enter something like "5 - 0", the program behaves normally and keeps running. Wenn Sie nun jedoch „10 / 0“ eingeben, hält das Programm am Breakpoint an.However, if you type "10 / 0", it pauses at the breakpoint. 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.You can even put any number of spaces between the operator and numbers; cin is smart enough to parse the input appropriately.

    Anhalten am bedingten BreakpointPause at the conditional breakpoint

Nützliche Fenster im DebuggerUseful windows in the debugger

Sobald Sie Ihren Code debuggen, können Sie feststellen, dass ein paar neue Fenster angezeigt werden.Whenever you debug your code, you may notice that some new windows appear. Diese Fenster unterstützen Sie beim Debuggen.These windows can assist your debugging experience. Sehen Sie sich das Fenster Auto an.Take a look at the Autos window. Im Fenster Auto sehen Sie die aktuellen Werte der Variablen, die mindestens in den letzten drei Zeilen und bis zur aktuellen Zeile verwendet wurden.The Autos window shows you the current values of variables used at least three lines before and up to the current line.

Fenster „Auto“The Autos window

Wenn Sie alle Variablen dieser Funktion ansehen möchten, wechseln Sie zum Fenster Lokale.To see all of the variables from that function, switch to the Locals window. Tatsächlich können Sie die Werte dieser Variablen während des Debuggens bearbeiten, um zu erfahren, welche Auswirkung sie auf das Programm haben würden.You can actually modify the values of these variables while debugging, to see what effect they would have on the program. Hier bearbeiten Sie die Variablen jedoch nicht.In this case, we'll leave them alone.

Fenster „Lokale Variablen“The Locals window

Sie können auch einfach direkt im Code den Mauszeiger auf Variablen bewegen, um deren aktuelle Werte an den Stellen anzeigen zu lassen, an denen die Ausführung jeweils pausiert wurde.You can also just hover over variables in the code itself to see their current values where the execution is currently paused. Sorgen Sie dafür, dass sich das Editorfenster im Vordergrund befindet, indem Sie darauf klicken, bevor Sie diesen Vorgang testen.Make sure the editor window is in focus by clicking on it first.

Daraufzeigen zur Anzeige der aktuellen VariablenwerteHover to view current variable values

Fortsetzen mit dem DebuggenTo continue debugging

  1. In der gelben Zeile auf der linken Seite wird der aktuelle Stand der Ausführung angezeigt.The yellow line on the left shows the current point of execution. Die aktuelle Zeile ruft Calculate auf. Drücken Sie also F11, um einen Einzelschritt in der Funktion auszuführen.The current line calls Calculate, so press F11 to Step Into the function. Dadurch wechseln Sie zum Text der Calculate-Funktion.You'll find yourself in the body of the Calculate function. Wenden Sie den Einzelschritt mit Bedacht an; wenn Sie dies zu oft tun, verschwenden Sie unter Umständen viel Zeit.Be careful with Step Into; if you do it too much, you may waste a lot of time. Sie gehen damit in jeden Code, den Sie in der Zeile verwenden, einschließlich der standardmäßigen Bibliotheksfunktionen.It goes into any code you use on the line you are on, including standard library functions.

  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.Now that the point of execution is at the start of the Calculate function, press F10 to move to the next line in the program's execution. F10 wird auch als Prozedurschritt bezeichnet.F10 is also known as Step Over. Sie können die Option Überspringen verwenden, um von Zeile zu Zeile zu springen, ohne dabei genau die Details jedes Teils der Zeile anzusehen.You can use Step Over to move from line to line, without delving into the details of what is occurring in each part of the line. 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.In general you should use Step Over instead of Step Into, unless you want to dive more deeply into code that is being called from elsewhere (as you did to reach the body of Calculate).

  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.Continue using F10 to Step Over each line until you get back to the main() function in the other file, and stop on the cout line.

    Ausführen von Calculate bis Rücksprung und Überprüfen des ErgebnissesStep out of Calculate and check result

    Es scheint, das Programm funktioniert wie erwartet: Es nimmt die erste Zahl und dividiert sie durch die zweite.It looks like the program is doing what is expected: it takes the first number, and divides it by the second. Bewegen Sie in der cout-Zeile den Mauszeiger über die Variable result, oder sehen Sie sich result im Fenster Auto an.On the cout line, hover over the result variable or take a look at result in the Autos window. Sie sehen, dass der Wert als „inf“ aufgelistet ist, was offenbar falsch ist, also korrigieren wir dies.You'll see its value is listed as "inf", which doesn't look right, so let's fix it. 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:The cout line just outputs whatever value is stored in result, so when you step one more line forward using F10, the console window displays:

    Das Ergebnis der Division durch 0The result of divide by zero

    Dieses Ergebnis resultiert daraus, dass die Division durch Null (0) nicht definiert ist. Das Programm hat also keine numerische Antwort für die angeforderte Operation.This result happens because division by zero is undefined, so the program doesn't have a numerical answer to the requested operation.

Beheben des Fehlers „Division durch Null“To fix the "divide by zero" error

Entwickeln Sie eine elegantere Lösung für die Division durch Null, damit der Benutzer das Problem auch versteht.Let's handle division by zero more gracefully, so a user can understand the problem.

  1. Nehmen Sie in CalculatorTutorial.cpp die folgenden Änderungen vor.Make the following changes in CalculatorTutorial.cpp. Dank eines Debuggerfeatures namens Bearbeiten und Fortfahren kann das Programm weiter ausgeführt werden, während Sie Änderungen vornehmen:(You can leave the program running as you edit, thanks to a debugger feature called Edit and Continue):

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include "pch.h"
    #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 nun einmal F5.Now press F5 once. Die Programmausführung wird ordnungsgemäß fortgeführt, bis das Programm pausiert, um eine Benutzereingabe anzufordern.Program execution continues all the way until it has to pause to ask for user input. Geben Sie noch einmal 10 / 0 ein.Enter 10 / 0 again. Nun wird eine hilfreichere Antwort ausgegeben.Now, a more helpful message is printed. Der Benutzer wird zu weiterer Eingabe aufgefordert, und das Programm wird weiter normal ausgeführt.The user is asked for more input, and the program continues executing normally.

    Das Endergebnis nach den ÄnderungenThe final result after changes

    Hinweis

    Wenn Sie Code bearbeiten, während sich das Programm im Debugmodus befindet, besteht die Gefahr, dass der Code veraltet.When you edit code while in debugging mode, there is a risk of code becoming stale. Dies geschieht, wenn der Debugger noch Ihren alten Code ausführt, und Ihre Änderungen noch nicht übernommen wurden.This happens when the debugger is still running your old code, and has not yet updated it with your changes. In so einem Fall werden Sie durch eine Popupmeldung vom Debugger informiert.The debugger pops up a dialog to inform you when this happens. Gelegentlich sollten Sie F5 drücken, um den gerade ausgeführten Code zu aktualisieren.Sometimes, you may need to press F5 to refresh the code being executed. Insbesondere wenn Sie eine Änderung in einer Funktion vornehmen, während sich der Ausführungspunkt innerhalb genau dieser Funktion befindet, müssen Sie einen Prozedurschritt aus dieser Funktion vornehmen, und danach wieder in die Funktion hineinspringen, um den aktualisierten Code zu erhalten.In particular, if you make a change inside a function while the point of execution is inside that function, you'll need to step out of the function, then back into it again to get the updated code. 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.If that doesn't work for some reason and you see an error message, you can stop debugging by clicking on the red square in the toolbar under the menus at the top of the IDE, then start debugging again by entering F5 or by choosing the green "play" arrow beside the stop button on the toolbar.

    Grundlegendes zu den Tastenkombinationen zum Ausführen und DebuggenUnderstanding the Run and Debug shortcuts

    • 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.F5 (or Debug > Start Debugging) starts a debugging session if one isn't already active, and runs the program until a breakpoint is hit or the program needs user input. 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.If no user input is needed and no breakpoint is available to hit, the program terminates and the console window closes itself when the program finishes running. Wenn ein „Hallo Welt“- oder ein ähnliches Programm ausgeführt werden soll, verwenden Sie STRG+F5 oder legen einen Breakpoint fest, bevor Sie F5 drücken, damit das Fenster nicht geschlossen wird.If you have something like a "Hello World" program to run, use Ctrl+F5 or set a breakpoint before you enter F5 to keep the window open.
    • Mit STRG+F5 bzw. Debuggen > Ohne Debuggen starten wird die Anwendung ausgeführt, ohne dass der Debugmodus gestartet wird.Ctrl+F5 (or Debug > Start Without Debugging) runs the application without going into debug mode. Dies benötigt etwas weniger Zeit als das Debuggen, und das Konsolenfenster bleibt geöffnet, nachdem das Programm die Ausführung beendet hat.This is slightly faster than debugging, and the console window stays open after the program finishes executing.
    • 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.F10 (known as Step Over) lets you iterate through code, line-by-line, and visualize how the code is run and what variable values are at each step of execution.
    • F11 bzw. Hineinspringen funktioniert ähnlich wie Überspringen. Allerdings wird hierbei in jede Funktion hineingesprungen, die auf der jeweiligen Ausführungszeile aufgerufen wird.F11 (known as Step Into) works similarly to Step Over, except it steps into any functions called on the line of execution. 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.For example, if the line being executed calls a function, pressing F11 moves the pointer into the body of the function, so you can follow the function's code being run before coming back to the line you started at. 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.Pressing F10 steps over the function call and just moves to the next line; the function call still happens, but the program doesn't pause to show you what it's doing.

Schließen der AppClose the app

  • Wenn die Ausführung noch nicht beendet ist, schließen Sie das Konsolenfenster für die Rechner-App.If it's still running, close the console window for the calculator app.

Die fertige AppThe finished app

Herzlichen Glückwunsch!Congratulations! Sie haben den Code für die Rechner-App fertiggestellt, und diese in Visual Studio erstellt und debuggt.You've completed the code for the calculator app, and built and debugged it in Visual Studio.

Nächste SchritteNext steps

Weitere Informationen zu Visual Studio für C++Learn more about Visual Studio for C++