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.
Visual Studio starten – das Visual Studio-Startdialogfeld wird angezeigt. Wählen Sie "Neues Projekt erstellen" aus, um zu beginnen.
Das Dialogfeld bietet Optionen zum Klonen eines Repositorys, Öffnen eines Projekts oder einer Projektmappe, Öffnen eines lokalen Ordners und Erstellen eines neuen Projekts."
Wählen Sie in der Liste der Projektvorlagen die Konsolen-App und dann "Weiter" aus.
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.
Wählen Sie im Dialogfeld "Neues Projekt konfigurieren" das Textfeld "Projektname" aus, benennen Sie den neuen ProjektrechnerTutorial, und wählen Sie dann "Erstellen" aus.
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.
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.
Um den Code auszuführen, wählen Sie auf der Menüleiste "Debuggen" aus, "Starten" ohne Debugging (STRG+F5).
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!
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.
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 Bibliothekstd::
vorangestellt werden, um dessen Bereich zu bezeichnen. Ohne diese Zeile müsste beispielsweise jeder Verweis aufcout
alsstd::cout
geschrieben werden. Dieusing
-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, daendl
immer der Puffer gelebt wird, der die Leistung des Programms beeinträchtigen kann. Da es sich hier jedoch um eine sehr kleine App handelt, wirdendl
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 Funktionmain()
muss auf den ganzen Code zugreifen können, damit dieser verwendet werden kann.
- Die
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.
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.
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
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.
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.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.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 istfilename.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 diemain()
-Funktion enthält, einzeln. Es soll aber dennoch inmain()
auf dieCalculator
-Klasse verwiesen werden.
- Dieser Code deklariert eine neue Funktion namens
Ein grüner Wellenschalter wird unter
Calculate
angezeigt, da dieCalculate
Funktion zwar deklariert wird, sie aber nicht definiert ist. Zeigen Sie mit der Maus aufCalculate
den Pfeil nach unten auf dem angezeigten Schraubenzieher, und wählen Sie "Definition berechnen" aus.Calculator.cpp
Dieser Code wird hinzugefügt zu
Calculator.cpp
: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.
Wechseln Sie zur
Calculator.cpp
-Datei im Editorfenster. Ersetzen Sie den Inhalt vonCalculator::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. DieCalculate
-Funktion muss aufgrund vondouble
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.
- Die Funktion
Wenn Sie den Code zu diesem Zeitpunkt erstellen und erneut ausführen, wird er sofort beendet, nachdem Sie gefragt haben, welcher Vorgang ausgeführt werden soll. Ändern Sie also die main
Funktion so, dass mehrere Berechnungen ausgeführt werden.
Aufrufen der Calculator
Klassenmemmemmfunktionen
Aktualisieren Sie die
main
Funktion wieCalculatorTutorial.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
undresult
) 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 derCalculator
-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 alstrue
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 dieCalculate()
-Funktion aktualisiert werden. - Der
c.Calculate(x, oper, y);
-Ausdruck ruft die zuvor definierteCalculate
-Funktion auf und stellt die eingegebenen Eingabewerte zur Verfügung. Die Funktion gibt dann eine Zahl zurück, die inresult
gespeichert wird. - Abschließend wird
result
in der Konsole ausgegeben, sodass der Benutzer das Ergebnis der Berechnung ansehen kann.
- Da C++-Programme immer bei der
Erneutes Erstellen und Testen des Codes
Testen Sie nun das Programm erneut, um sicherzustellen, dass alles ordnungsgemäß funktioniert.
Drücken Sie STRG+F5, um die App neu zu erstellen und zu starten.
Geben Sie
5+5
ein, und drücken Sie die EINGABETASTE. Überprüfen Sie, ob das Ergebnis 10 ist.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
Legen
CalcuatorTutorial.cpp
Sie 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.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.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.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.
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.
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.
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.
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.
Fortsetzen des Debuggens
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 derCalculate
-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.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 vonCalculate
anzusehen.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 Zeilecout
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 Variableresult
, oder sehen Sie sichresult
im Fenster Auto an. Sein Wert istinf
, was offenbar falsch ist, also korrigieren wir dies. Diecout
-Zeile gibt nur aus, welcher Wert auch immer inresult
gespeichert ist. Wenn Sie also mithilfe von F10 eine Zeile weiter springen, wird im Konsolenfenster Folgendes angezeigt: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.
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 eineif
folgendecin >> 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; }
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.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:
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.
Melden Sie sich in dem Dialogfeld Ein Git-Repository erstellen in GitHub an.
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.
Wählen Sie Erstellen und Pushen aus.
Nachdem Sie Ihr Repository erstellt haben, werden auf der Statusleiste Details zum Status angezeigt.
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
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
- 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.
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.
Wählen Sie auf der Menüleiste in Visual Studio "Neues>Projekt">aus. Das Fenster Neues Projekt wird angezeigt.
Prüfen Sie auf der linken Randleiste, ob Visual C++ ausgewählt ist. Wählen Sie in der Mitte die Windows-Konsolenanwendung aus.
Geben Sie im Textfeld "Name" unten den Namen des neuen Projekts "CalculatorTutorial" ein, und wählen Sie dann "OK" aus.
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.
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.
Um den Code auszuführen, wählen Sie auf der Menüleiste "Debuggen" aus, "Starten" ohne Debugging (STRG+F5).
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!
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.
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 Bibliothekstd::
vorangestellt werden, um dessen Bereich zu bezeichnen. Ohne diese Zeile müsste beispielsweise jeder Verweis aufcout
alsstd::cout
geschrieben werden. Dieusing
-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, daendl
der Puffer immer gelebt und die Leistung des Programms beeinträchtigt werden kann. Da es sich hier jedoch um eine sehr kleine App handelt, wirdendl
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 Funktionmain()
muss auf den ganzen Code zugreifen können, damit dieser verwendet werden kann.
- Die
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.
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.
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.
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
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.
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.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.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 istfilename.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 diemain()
-Funktion enthält, einzeln. Es soll aber dennoch inmain()
auf dieCalculator
-Klasse verwiesen werden.
- Dieser Code deklariert eine neue Funktion namens
Ein grüner Wellenschalter wird unter
Calculate
angezeigt, da dieCalculate
Funktion zwar deklariert wird, sie aber nicht definiert ist. Zeigen Sie mit der Maus aufCalculate
den 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 wurdeCalculator.cpp
hinzugefügt.Momentan wird nur 0.0 zurückgegeben. Ändern Sie das nun. Drücken Sie ESC, um das Popupelement zu schließen.
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. DieCalculate
-Funktion muss aufgrund vondouble
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.
- Die Funktion
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
Aktualisieren Sie nun die
main
-Funktion inCalculatorTutorial.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
undresult
) 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 derCalculator
-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 alstrue
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 dieCalculate()
-Funktion aktualisiert werden. - Der
c.Calculate(x, oper, y);
-Ausdruck ruft die zuvor definierteCalculate
-Funktion auf und stellt die eingegebenen Eingabewerte zur Verfügung. Die Funktion gibt dann eine Zahl zurück, die inresult
gespeichert wird. - Abschließend wird
result
in der Konsole ausgegeben, sodass der Benutzer das Ergebnis der Berechnung ansehen kann.
- Da C++-Programme immer bei der
Erneutes Erstellen und Testen des Codes
Testen Sie das Programm erneut, um sicherzustellen, dass alles ordnungsgemäß funktioniert.
Drücken Sie STRG+F5, um die App neu zu erstellen und zu starten.
Geben Sie
5+5
ein, und drücken Sie die EINGABETASTE. Überprüfen Sie, ob das Ergebnis 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
Legen
CalcuatorTutorial.cpp
Sie in der Zeile einen Haltepunktresult = 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.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.
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.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.
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.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.
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.
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.
Fortsetzen des Debuggens
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 derCalculate
-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.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 vonCalculate
anzusehen.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 Zeilecout
an.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 Variableresult
, oder sehen Sie sichresult
im Fenster Auto an. Sein Wert istinf
, was offenbar falsch ist, also korrigieren wir dies. Diecout
-Zeile gibt nur aus, welcher Wert auch immer inresult
gespeichert ist. Wenn Sie also mithilfe von F10 eine Zeile weiter springen, wird im Konsolenfenster Folgendes angezeigt: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.
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, eineif
-Anweisung nachcin >> 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; }
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.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.