Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het gebruikelijke beginpunt voor een C++-programmeur is een "Hallo wereld!"-toepassing die wordt uitgevoerd op de opdrachtregel. U begint met dat in dit artikel en gaat vervolgens verder met iets uitdagender: een rekenmachine-app.
Vereiste voorwaarden
- Visual Studio met het desktopontwikkeling met C++ werkpakket geïnstalleerd en actief op uw computer. Zie C++-ondersteuning installeren in Visual Studio om deze te installeren.
- In deze zelfstudie ziet u een functie met de naam Bewerken en doorgaan, waarmee u wijzigingen in uw code kunt aanbrengen terwijl de app wordt uitgevoerd. Als u bewerken en doorgaan wilt inschakelen, selecteert u in het hoofdmenu Extra>Opties>Foutopsporing>Algemeen en zorgt u ervoor dat de optie Bronbestanden moeten exact overeenkomen met de oorspronkelijke versie is ingeschakeld.
Uw app-project maken
Visual Studio maakt gebruik van projecten om de code voor een app te organiseren en oplossingen om een of meer projecten te organiseren. Een project bevat alle opties, configuraties en regels die worden gebruikt om een app te bouwen. Het beheert ook de relatie tussen alle bestanden van het project en eventuele externe bestanden. Als u uw app wilt maken, maakt u eerst een nieuw project en een nieuwe oplossing.
Start Visual Studio: het dialoogvenster Start van Visual Studio wordt weergegeven. Selecteer Een nieuw project maken om aan de slag te gaan.
Het dialoogvenster bevat opties voor het klonen van een opslagplaats, het openen van een project of oplossing, het openen van een lokale map en het maken van een nieuw project.
Stel in het dialoogvenster Een nieuw project maken de vervolgkeuzelijst taal in op C++, stel de vervolgkeuzelijst platform in op Windows, selecteer Console-app in de lijst met projecttypen en selecteer vervolgens Volgende.
De vervolgkeuzelijst taal is ingesteld op C++, de vervolgkeuzelijst op het platform is ingesteld op Windows en projecttypen zoals Leeg project, Console-app, CMake-project, Wizard Windows Desktop, enzovoort, worden weergegeven in de lijst met projecttypen.
Belangrijk
Zorg ervoor dat u de C++-versie van de console-app-sjabloon selecteert. Het bevat de tags C++, Windows en Console en het pictogram heeft '++' in de hoek.
Selecteer in het dialoogvenster Uw nieuwe project configureren het tekstvak Projectnaam , geef uw nieuwe project CalculatorTutorial een naam en selecteer vervolgens Maken.
Er wordt een lege C++ Windows-consoletoepassing 'Hallo wereld'-app gemaakt. Consoletoepassingen gebruiken een Windows-consolevenster om uitvoer weer te geven en gebruikersinvoer te accepteren. In Visual Studio wordt een editorvenster geopend en wordt de gegenereerde code weergegeven:
// 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
Controleer of uw nieuwe app wordt gebouwd en uitgevoerd
Met de sjabloon voor een nieuwe Windows-consoletoepassing wordt een eenvoudige C++ 'Hallo wereld'-app gemaakt. Op dit moment kunt u zien hoe Visual Studio de apps bouwt en uitvoert die u rechtstreeks vanuit de IDE maakt.
Als u uw project wilt bouwen, selecteert u Build Solution in het menu Build . In het venster Uitvoer worden de resultaten van het bouwproces weergegeven.
Als u de code wilt uitvoeren, selecteert u op de menubalk Debug>Start zonder foutopsporing (Ctrl+F5).
Er wordt een consolevenster geopend en uw app wordt erin uitgevoerd.
Wanneer u een console-app start in Visual Studio, wordt uw code uitgevoerd en wordt vervolgens 'Druk op een willekeurige toets om dit venster te sluiten' afgedrukt. . zodat u een kans krijgt om de uitvoer te zien.
Gefeliciteerd! U hebt uw eerste 'Hallo wereld!'-console-app gemaakt in Visual Studio.
Druk op een toets om het consolevenster te sluiten en terug te keren naar Visual Studio.
U hebt nu de hulpprogramma's om uw app na elke wijziging te bouwen en uit te voeren om te controleren of de code nog steeds werkt zoals verwacht. Later laten we u zien hoe u fouten kunt opsporen als dat niet zo is.
De code bewerken
Laten we nu de code in deze sjabloon aanpassen tot een rekenmachine-app.
Vervang de inhoud van het
CalculatorTutorial.cppbestand door de volgende code, zodat het overeenkomt met dit voorbeeld:// 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 fileDe code begrijpen
- De
#includeinstructie voegt code uit andere bestanden toe. Soms ziet u mogelijk een bestandsnaam tussen punthaken zoals<iostream>. Met de punthaken wordt de compiler geïnstrueerd om eerst in de standaardsysteemmappen naar hetiostreamheaderbestand te zoeken en zo niet te vinden, om te zoeken in mappen die specifiek zijn voor het project. In andere gevallen ziet u mogelijk een bestandsnaam tussen aanhalingstekens zoals"someHeader.h". Met de aanhalingstekens wordt de compiler geïnstrueerd om het zoeken in de standaardsysteemmappen over te slaan en in plaats daarvan alleen te zoeken in mappen die specifiek zijn voor het project. - Hiermee
using namespace std;wordt aan de compiler aangegeven dat code uit de standaardbibliotheek van C++ moet worden gebruikt in dit bestand. Zonder deze regel moet elk trefwoord uit de bibliotheek worden voorafgegaan doorstd::het bereik aan te geven. Zonder die regel zou elke verwijzingcoutbijvoorbeeld worden geschreven alsstd::cout. Deusinginstructie wordt toegevoegd om het gemakkelijker te maken om toegang te krijgen tot code in een andere naamruimte. - Het
couttrefwoord wordt gebruikt om af te drukken naar de standaarduitvoer in C++. De<<operator instrueert de compiler om alles wat er rechts van staat naar de standaarduitvoer te sturen. - Het
endltrefwoord is vergelijkbaar met de Enter-toets. Hiermee wordt de regel beëindigd en wordt de cursor naar de volgende regel verplaatst. Het is een betere gewoonte om een\nbinnen de tekenreeks (gevat door"") te plaatsen om hetzelfde effect te bereiken, omdatendlaltijd de buffer leegmaakt, wat de prestaties van het programma kan schaden. Maar omdat dit een zeer kleine app is,endlwordt in plaats daarvan gebruikt. - Alle C++-instructies moeten eindigen met puntkomma's en alle C++-toepassingen moeten een
main()functie bevatten. Deze functie is wat het programma aan het begin uitvoert. Om gebruikt te kunnen worden, moet alle code toegankelijk zijn vanuitmain().
- De
Als u het bestand wilt opslaan, drukt u op Ctrl+S of selecteert u het diskettepictogram op de werkbalk onder de menubalk.
Als u de toepassing wilt uitvoeren, drukt u op Ctrl+F5 of gaat u naar het menu Foutopsporing en selecteert u Starten zonder foutopsporing. Er wordt nu een consolevenster weergegeven dat er als volgt uitziet.
Sluit het consolevenster wanneer u klaar bent.
Code toevoegen om wat wiskunde uit te voeren
Een klasse lijkt op een blauwdruk voor een object dat iets doet. In dit geval definiëren we een rekenmachineklasse die de wiskundige logica bevat.
Een calculatorklasse toevoegen
Ga naar het menu Project en selecteer Klasse toevoegen. Voer Calculator in het bewerkingsvak Klassenaam in. Kies OK.
Het veld klassenaam bevat de tekstcalculator. Het h-bestandsveld bevat Calculator.h. Het .cpp bestandsveld bevat Calculator.cpp. Het basisklasseveld is leeg. De opties voor inline en Beheerd zijn uitgeschakeld.
Er worden twee nieuwe bestanden toegevoegd aan uw project. Als u al uw gewijzigde bestanden tegelijk wilt opslaan, drukt u op Ctrl+Shift+S. Het is een sneltoets voor Alles>opslaan. Er is ook een werkbalkknop voor Alles opslaan, een pictogram van twee diskettes, te vinden naast de knop Opslaan . Over het algemeen is het raadzaam om Alles op te slaan regelmatig uit te voeren, zodat u geen wijzigingen vergeet op te slaan.
De wizard Klasse toevoegen maakt
.hen.cppbestanden met dezelfde naam als de klasse. U ziet een volledige lijst met uw projectbestanden in het Solution Explorer-venster , zichtbaar aan de zijkant van de IDE. Als het venster niet zichtbaar is, opent u het vanuit de menubalk viaSolution Explorer weergeven>.
Het handleidingproject rekenmachine heeft een knooppunt voor headerbestanden dat Calculator.h bevat. Een knooppunt Bronbestanden bevat Calculator.cpp en CalculatorTutorial.cpp. Knooppunten voor verwijzingen, externe afhankelijkheden en resourcebestanden zijn zichtbaar maar gesloten.
U kunt een bestand openen door erop te dubbelklikken in het venster Solution Explorer . Dubbelklik op
Calculator.hom deze te openen.Vervang de inhoud van
Calculator.hdoor de volgende code, zodat het bestand er nu zo uitziet:#pragma once class Calculator { public: double Calculate(double x, char oper, double y); };De code begrijpen
- Deze code declareert een nieuwe functie die wordt aangeroepen
Calculate, waarmee wiskundige bewerkingen worden verwerkt voor optellen, aftrekken, vermenigvuldigen en delen. - C++-code is ingedeeld in headerbestanden en
.hbronbestanden (.cpp). Sommige andere bestandsextensies worden ondersteund door verschillende compilers, maar dit zijn de belangrijkste die u moet weten. Functies en variabelen worden meestal gedeclareerd, dat wil zeggen, van een naam en een type voorzien, in headerbestanden, en geïmplementeerd, dat wil zeggen, van een definitie voorzien, in bronbestanden. Voor toegangscode die in een ander bestand is gedefinieerd, kunt u de#include "filename.h"naam van het bestand gebruikenfilename.hdat de variabelen of functies declareert die u wilt gebruiken. - Het is raadzaam om uw code in verschillende bestanden te ordenen op basis van wat het doet, zodat u de code die u later nodig hebt, gemakkelijk kunt vinden. In ons geval definiëren we de
Calculatorklasse afzonderlijk van het bestand met demain()functie, maar we zijn van plan om te verwijzen naar deCalculatorklasse inmain().
- Deze code declareert een nieuwe functie die wordt aangeroepen
Er wordt een groene golvende lijn weergegeven onder
Calculateomdat deCalculatefunctie wel gedeclareerd is, maar niet gedefinieerd is. Beweeg de muisaanwijzer overCalculate, klik op de pijl-omlaag op het pictogram van de schroevendraaier en selecteer Definitie maken van 'Berekenen' inCalculator.cpp.
Deze code wordt toegevoegd aan
Calculator.cpp:
De definitie van de functie is: double Calculator::Calculate( double x, char oper, double y) { return 0,0; }
Op dit moment wordt gewoon 0,0 geretourneerd. Laten we die waarde wijzigen.
Schakel over naar het
Calculator.cppbestand in het editorvenster. Vervang de inhoud vanCalculator::Calculate(double x, char oper, double y)door: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; } }De code begrijpen
- De functie
Calculategebruikt een getal, een operator en een tweede getal. Vervolgens wordt de aangevraagde bewerking uitgevoerd op de twee getallen. - De
switchinstructie controleert welke operator is opgegeven en voert het geval uit dat overeenkomt met die bewerking. Hetdefault:geval is een back-up voor het geval dat de gebruiker een operator typt die niet wordt verwerkt door een van de voorgaandecaseinstructies. Het is raadzaam om ongeldige gebruikersinvoer op een elegantere manier af te handelen, maar dit valt buiten het bereik van deze zelfstudie. - Het
doubletrefwoord geeft een type getal aan dat decimalen ondersteunt. Dit type getal wordt een drijvendekommagetal genoemd, endoublestaat voor een drijvendekommagetal dat extra precisie heeft. Op deze manier kan de rekenmachine zowel decimale wiskundige als gehele getallen verwerken. DeCalculatefunctie is vereist om altijd een drijvende kommanummer met dubbele precisie te retourneren vanwege hetdoublebegin van de code (dit geeft het retourtype van de functie aan), daarom retourneren we 0,0 in het standaardscenario. - Het
.hbestand declareert het prototype van de functie, waarmee de compiler vooraf aangeeft welke parameters het nodig heeft en welk retourtype ervan moet worden verwacht. Het.cppbestand bevat alle implementatiedetails van de functie.
- De functie
Als u de code op dit moment bouwt en uitvoert, wordt deze onmiddellijk afgesloten nadat u hebt gevraagd welke bewerking moet worden uitgevoerd. Wijzig daarom de main functie om meerdere berekeningen uit te voeren.
De functies van het Calculator klasselid aanroepen
Werk de functie
maininCalculatorTutorial.cppals volgt bij:// 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; }De code begrijpen
- Omdat C++-programma's altijd bij de
main()functie beginnen, moeten we onze andere code daar aanroepen, zodat er een#includeinstructie nodig is om die code zichtbaar te maken voor onzemain()functie. - De variabelen
x,yenoperresultworden gedeclareerd om respectievelijk het eerste getal, het tweede getal, de operator en het uiteindelijke resultaat op te slaan. Het is altijd een goede gewoonte om ze een aantal initiële waarden te geven om niet-gedefinieerd gedrag te voorkomen. Dit is wat hier wordt gedaan. - De
Calculator c;regel declareert een object met de naamcals een exemplaar van deCalculatorklasse. De klasse zelf is slechts een blauwdruk voor de werking van rekenmachines; het object is de specifieke rekenmachine die de wiskunde doet. - De
while (true)statement is een lus. De code in de lus wordt telkens opnieuw uitgevoerd zolang de voorwaarde in de()lus waar is. Omdat de voorwaarde gewoon wordt vermeld alstrue, is het altijd waar, waardoor de lus oneindig blijft doorgaan. Als u het programma wilt sluiten, moet de gebruiker het consolevenster handmatig sluiten. Anders wacht het programma altijd op nieuwe invoer. - Het
cintrefwoord accepteert invoer van de gebruiker. De invoerstroom is slim genoeg om een regel tekst te verwerken die is ingevoerd in het consolevenster en deze in elk van de vermelde variabelen in de volgorde te plaatsen. - De
c.Calculate(x, oper, y);expressie roept deCalculateeerder gedefinieerde functie aan en levert de ingevoerde invoerwaarden en de aangevraagde bewerking. De functie retourneert vervolgens een getal dat is opgeslagen inresult. - Ten slotte wordt
resultgeprint naar de console en ziet de gebruiker het resultaat van de berekening.
- Omdat C++-programma's altijd bij de
De code opnieuw bouwen en testen
Test het programma nu opnieuw om te controleren of alles goed werkt.
Druk op Ctrl+F5 om de app opnieuw te bouwen en te starten.
Enter
5+5en druk op Enter. Controleer of het resultaat 10 is.
De app voert het bericht uit: Voer de bewerking in die moet worden uitgevoerd. Opmaak: a+b | a-b | a*b | a/b. De gebruiker heeft 5+5 ingevoerd. De app-uitvoer: Resultaat van 5+5 is: 10
Stop het programma door het consolevenster te sluiten.
Fouten opsporen in de app
Omdat de gebruiker vrij is om iets in het consolevenster te typen, gaan we ervoor zorgen dat de calculator onverwachte invoer verwerkt. In plaats van het programma uit te voeren, gaan we fouten opsporen, zodat we kunnen controleren wat het stapsgewijs doet.
De app uitvoeren in het foutopsporingsprogramma
Stel een breekpunt in in
CalcuatorTutorial.cppop de regel:result = c.Calculate(x, oper, y);. Als u het onderbrekingspunt wilt instellen, klikt u naast de lijn in de grijze verticale balk aan de linkerkant van het editorvenster, zodat er een rode stip wordt weergegeven.
Wanneer we nu fouten in het programma opsporen, wordt de uitvoering op die regel onderbroken. We hebben al een ruw idee dat het programma werkt voor eenvoudige gevallen. Omdat we de uitvoering niet elke keer dat we aanroepen
Calculate()willen onderbreken, gaan we het onderbrekingspunt voorwaardelijk maken.Klik met de rechtermuisknop op de rode stip die het onderbrekingspunt vertegenwoordigt en selecteer Voorwaarden. Voer in het invoervak voor de voorwaarde in
(y == 0) && (oper == '/'). Selecteer de knop Sluiten om de onderbrekingspuntvoorwaarde op te slaan.
Het onderbrekingspunt bevindt zich op de regel: result = c dot Calculate (x, oper, y). 'Voorwaarden...' De optie Voorwaarde is ingeschakeld. De vervolgkeuzelijst Voorwaarden is ingesteld op 'Voorwaardelijke expressie'. De vervolgkeuzelijst voorwaarde is ingesteld op 'Is waar'. De voorwaarde is ingesteld op y == 0 && oper == '/'.
De uitvoering wordt nu onderbroken op het onderbrekingspunt wanneer de app probeert te delen door 0.
Als u fouten in het programma wilt opsporen, drukt u op F5 of selecteert u de werkbalkknop Lokaal Windows Debugger-foutopsporingsprogramma met het groene pijlpictogram. Als u in uw console-app iets als '5 - 0' invoert, gedraagt het programma zich normaal en blijft het actief. Als u echter '10 / 0' typt, wordt deze onderbroken op het onderbrekingspunt. U kunt een willekeurig aantal spaties tussen de operator en getallen plaatsen:
cinis slim genoeg om de invoer op de juiste manier te parseren.
Nuttige vensters in het foutopsporingsprogramma
Wanneer u fouten in uw code opssport, ziet u mogelijk dat er nieuwe vensters worden weergegeven. Deze vensters kunnen uw foutopsporingservaring helpen. Bekijk het venster Autos . In het venster Autos ziet u de huidige waarden van variabelen die gebruikt zijn vanaf ten minste drie regels voor de huidige regel tot en met de huidige regel. Als u het venster Autos niet ziet, selecteert u in het hoofdmenu Fouten opsporen> inWindows>Auto's.
De waarde van oper is 47 '/', het resultaat is 5, x is 10 en y is 0.
Als u alle variabelen van die functie wilt zien, schakelt u over naar het venster Locals . Omdat dit een kleine functie is, worden in het venster Auto's en Locals dezelfde variabelen weergegeven. Maar u kunt de waarden van deze variabelen wijzigen in het venster Locals tijdens foutopsporing om te zien welk effect ze op het programma zouden hebben. In dit geval laten we ze alleen. Open het venster Locals door Locals onderaan het venster Autos te selecteren of door te selecteren in het hoofdmenu Fouten opsporen> inWindows>Locals.
De waarde van oper is 47 '/', het resultaat is 0, x is 10 en y is 0.
U kunt ook de muisaanwijzer op variabelen in de code plaatsen om de huidige waarden te zien op het punt waarop de uitvoering momenteel is onderbroken. Controleer of het editorvenster de focus heeft door erop te klikken.
Doorgaan met foutopsporing
De gele pijl aan de linkerkant toont het huidige uitvoeringspunt. De huidige regel roept
Calculateaan, dus druk op F11 om in de functie te stappen. Nu voert u code uit in de hoofdtekst van deCalculatefunctie. Wees voorzichtig met Stap in, omdat u hiermee elke functie op de regel waarin u zich bevindt kunt binnengaan, inclusief functies uit de standaardbibliotheek. Het is prima om in de standaardbibliotheek te gaan, maar misschien wilt u zich meer concentreren op uw code in plaats van bibliotheekcode.Nu het uitvoeringspunt aan het begin van de
Calculatefunctie staat, drukt u op F10 om naar de volgende regel in de uitvoering van het programma te gaan. F10 wordt ook wel Step Over genoemd. U kunt Step Over gebruiken om van regel naar regel te gaan, zonder de details te bekijken van wat er in elk deel van de regel gebeurt. Over het algemeen moet u Step Over gebruiken in plaats van Step Into , tenzij u dieper wilt ingaan op code die ergens anders wordt aangeroepen (zoals u hebt gedaan om de hoofdtekst vanCalculate).Ga verder met het gebruik van F10 om elke regel te doorlopen totdat u teruggaat naar de
main()functie in het andere bestand en stop op decoutregel.Het programma doet wat er wordt verwacht: het neemt het eerste getal en deelt het door de tweede. Plaats de muisaanwijzer op de
coutresultvariabele of kijkresultin het venster Autos . De waarde isinf, wat er niet goed uitziet.
De huidige instructie in het foutopsporingsprogramma is cout << "Result is: " << result << endl; Het resultaat is inf in het venster autos.
Laten we het oplossen. De
coutregel voert elke waarde uit waarin wordt opgeslagenresult, dus wanneer u één regel vooruit stapt met F10, wordt het consolevenster weergegeven:
De uitvoer van de app: Voer de bewerking in die moet worden uitgevoerd. Opmaak: a+b | a-b | a*b | a/b. De gebruiker heeft 5-0 ingevoerd. De uitvoer van de app: Resultaat is: 5. De gebruiker heeft 10/0 ingevoerd. De uitvoer van de app: resultaat is: inf
Dit resultaat is omdat delen door nul niet is gedefinieerd, dus het programma heeft geen numeriek antwoord voor de aangevraagde bewerking.
De fout 'delen door nul' oplossen
Laten we delen door nul beter afhandelen, zodat de gebruiker het probleem gemakkelijker kan begrijpen.
Breng de volgende wijzigingen aan in
CalculatorTutorial.cpp. U kunt het programma actief laten terwijl u bewerkt, dankzij een functie voor foutopsporingsprogramma's met de naam Bewerken en Doorgaan. Voeg eenifinstructie toe die volgtcin >> x >> oper >> y;om te controleren op delen door nul en een bericht naar de gebruiker uit te voeren als dit gebeurt. Anders wordt het resultaat afgedrukt.// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> #include "Calculator.h" using namespace std; int main() { double x = 0.0; double y = 0.0; double result = 0.0; char oper = '+'; cout << "Calculator Console Application" << endl << endl; cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl; Calculator c; while (true) { cin >> x >> oper >> y; if (oper == '/' && y == 0) { cout << "Math error: Attempted to divide by zero!" << endl; continue; } else { result = c.Calculate(x, oper, y); } cout << "Result " << "of " << x << oper << y << " is: " << result << endl; } return 0; }Druk eenmaal op F5 . De uitvoering van het programma wordt voortgezet totdat deze moet worden onderbroken om gebruikersinvoer te vragen. Voer opnieuw in
10 / 0. Er wordt nu een nuttiger bericht afgedrukt. De gebruiker wordt gevraagd om meer invoer en het programma wordt normaal uitgevoerd.
In het consolevenster worden twee regels weergegeven: 10/0 Resultaat is: inf, gevolgd door 10/0 Wiskundige fout: Poging om te delen door nul.
Opmerking
Wanneer u code in de foutopsporingsmodus bewerkt, bestaat het risico dat code verouderd raakt. Dit gebeurt wanneer het foutopsporingsprogramma nog steeds uw oude code uitvoert en deze nog niet heeft bijgewerkt met uw wijzigingen. In het foutopsporingsprogramma wordt een dialoogvenster weergegeven waarin u wordt geïnformeerd wanneer dit gebeurt. Soms moet u mogelijk op F5 drukken om de code te vernieuwen die wordt uitgevoerd. Met name als u een wijziging aanbrengt binnen een functie terwijl het uitvoeringspunt zich in die functie bevindt, moet u de functie uitstappen en vervolgens weer in de functie zetten om de bijgewerkte code op te halen. Als dat niet werkt en er een foutbericht wordt weergegeven, kunt u de foutopsporing stoppen door op het rode vierkant in de werkbalk onder de menu's boven aan de IDE te klikken en vervolgens opnieuw foutopsporing te starten door F5 in te voeren of door de groene pijl afspelen naast de stopknop op de werkbalk te kiezen.
Een andere reden waarom bewerken en doorgaan kan mislukken, is als u een bericht ziet met de tekst "De instelling 'Bronbestanden vereisen om exact overeen te komen met de oorspronkelijke versie' onder Debug->Opties->Algemeen moet zijn ingeschakeld..." Om dit op te lossen, selecteert u in het hoofdmenu Extra>Opties>Debuggen>Algemeen en zorgt u ervoor dat Bronbestanden vereisen om exact overeen te komen met de oorspronkelijke versie is ingeschakeld.
Inzicht in de snelkoppelingen voor uitvoeren en debuggen
- F5, of Foutopsporingstarten>, start een foutopsporingssessie, als deze nog niet actief is en voert het programma uit totdat een onderbrekingspunt is bereikt of het programma gebruikersinvoer nodig heeft. Als er geen gebruikersinvoer nodig is en er geen onderbrekingspunt beschikbaar is om te raken, wordt het programma beëindigd en sluit het consolevenster zichzelf wanneer het programma is uitgevoerd. Als uw programma naar de console wordt uitgevoerd, gebruikt u Ctrl+F5 of stelt u een onderbrekingspunt in voordat u op F5 drukt om het venster geopend te houden.
- Met Ctrl+F5 of Foutopsporing> wordt de toepassing uitgevoerd zonder de foutopsporingsmodus in te gaan. Dit is iets sneller dan foutopsporing en het consolevenster blijft geopend nadat het programma is uitgevoerd.
- Met F10, ook wel Step Over genoemd, kunt u code, line-by-line doorlopen en visualiseren hoe de code wordt uitgevoerd en welke variabele waarden er zijn bij elke stap van de uitvoering.
- F11, ook wel Step Into genoemd, werkt op dezelfde manier als Step Over, met uitzondering van functies die worden aangeroepen op de uitvoeringsregel. Als de regel die wordt uitgevoerd bijvoorbeeld een functie aanroept, wordt de aanwijzer door op F11 te drukken naar de hoofdtekst van de functie verplaatst, zodat u de code van de functie kunt volgen die wordt uitgevoerd voordat u teruggaat naar de regel waarop u bent begonnen. Druk op F10 om over de functie-aanroep heen te stappen en naar de volgende regel te gaan; de functieaanroep gebeurt nog steeds, maar het programma stopt niet om te laten zien wat het doet.
De app sluiten
- Als deze nog steeds wordt uitgevoerd, sluit u het consolevenster om de rekenmachine-app te stoppen.
Git-broncodebeheer toevoegen
Nu u een app hebt gemaakt, kunt u deze toevoegen aan een Git-opslagplaats. Wij zorgen ervoor. Visual Studio maakt dit proces eenvoudig met Git-hulpprogramma's die u rechtstreeks vanuit de IDE kunt gebruiken.
Aanbeveling
Git is het meest gebruikte moderne versiebeheersysteem, dus of u nu een professionele ontwikkelaar bent of leert hoe u codet, Git kan erg nuttig zijn. Als u niet eerder met Git werkt, is de https://git-scm.com/ website een goede plek om te beginnen. Daar vindt u cheatsheets, een populair onlineboek en Git Basics-video's.
Als u uw code wilt koppelen aan Git, begint u met het maken van een nieuwe Git-opslagplaats waar uw code zich bevindt. U doet dit als volgt:
Selecteer In de statusbalk in de rechterbenedenhoek van Visual Studio de optie Toevoegen aan broncodebeheer en selecteert u Vervolgens Git.
Meld u aan bij GitHub in het dialoogvenster Een Git-opslagplaats maken .
De naam van de opslagplaats wordt automatisch ingevuld op basis van uw maplocatie. Standaard is uw nieuwe opslagplaats privé, wat betekent dat u de enige bent die er toegang toe heeft.
Aanbeveling
Of uw opslagplaats nu openbaar of privé is, u kunt het beste een externe back-up van uw code veilig opslaan op GitHub. Zelfs als u niet met een team werkt, maakt een externe opslagplaats uw code beschikbaar vanaf elke computer.
Selecteer maken en pushen.
Nadat u de opslagplaats hebt gemaakt, worden de statusgegevens weergegeven op de statusbalk.
Het eerste pictogram met de pijlen laat zien hoeveel uitgaande/binnenkomende commits er in uw huidige branch zijn. U kunt dit pictogram gebruiken om binnenkomende commits op te halen of uitgaande commits te verzenden. U kunt er ook voor kiezen om deze doorvoeringen eerst weer te geven. Als u dit wilt doen, selecteert u het pictogram en selecteert u Vervolgens Uitgaande/Inkomende items weergeven.
Het tweede pictogram met het potlood toont het aantal niet-doorgevoerde wijzigingen in uw code. U kunt dit pictogram selecteren om deze wijzigingen weer te geven in het venster Git-wijzigingen.
Zie de documentatie voor Versiebeheer van Visual Studio voor meer informatie over het gebruik van Git met uw app.
De voltooide app
Gefeliciteerd! U hebt de code voor de rekenmachine-app voltooid, deze gebouwd en er fouten in opgespoord en toegevoegd aan een opslagplaats, allemaal in Visual Studio.
Volgende stappen
Het gebruikelijke beginpunt voor een C++-programmeur is een "Hallo wereld!"-toepassing die wordt uitgevoerd op de opdrachtregel. U begint met dat in dit artikel en gaat vervolgens verder met iets uitdagender: een rekenmachine-app.
Vereiste voorwaarden
- Visual Studio met het desktopontwikkeling met C++ werkpakket geïnstalleerd en actief op uw computer. Zie C++-ondersteuning installeren in Visual Studio om deze te installeren.
Uw app-project maken
Visual Studio maakt gebruik van projecten om de code voor een app te organiseren en oplossingen om een of meer projecten te organiseren. Een project bevat alle opties, configuraties en regels die worden gebruikt om een app te bouwen. Het beheert ook de relatie tussen alle bestanden van het project en eventuele externe bestanden. Als u uw app wilt maken, maakt u eerst een nieuw project en een nieuwe oplossing.
Selecteer Bestand>nieuw>project op de menubalk in Visual Studio. Het venster Nieuw project wordt geopend.
Zorg er in de linkerzijbalk voor dat Visual C++ is geselecteerd. Selecteer console-app in het midden.
Geef in het tekstvak Naam onderaan de naam de naam van het nieuwe project CalculatorTutorial en selecteer VERVOLGENS OK.
Aan de linkerkant is Andere talen > Visual C++ geselecteerd. In het midden is het projecttype Console-app geselecteerd. Het tekstvak Naam bevat CalculatorTutorial.
Er wordt een lege C++ Windows-consoletoepassing 'Hallo wereld'-app gemaakt. Consoletoepassingen gebruiken een Windows-consolevenster om uitvoer weer te geven en gebruikersinvoer te accepteren. In Visual Studio wordt een editorvenster geopend en wordt de gegenereerde code weergegeven:
// 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
Controleer of uw nieuwe app wordt gebouwd en uitgevoerd
Met de sjabloon voor een nieuwe Windows-consoletoepassing maakt u een eenvoudige C++ 'Hallo wereld'-app. Op dit moment kunt u zien hoe Visual Studio de apps bouwt en uitvoert die u rechtstreeks vanuit de IDE maakt.
Als u uw project wilt bouwen, selecteert u Build Solution in het menu Build . In het venster Uitvoer worden de resultaten van het bouwproces weergegeven.
Als u de code wilt uitvoeren, selecteert u op de menubalk Debug, Start zonder foutopsporing (Ctrl+F5).
Er wordt een consolevenster geopend en uw app wordt erin uitgevoerd.
Wanneer u een console-app start in Visual Studio, wordt uw code uitgevoerd en vervolgens afgedrukt
Press any key to close this window . . .om u de uitvoer te laten zien.Gefeliciteerd! U hebt uw eerste 'Hallo wereld!'-console-app gemaakt in Visual Studio.
Druk op een toets om het consolevenster te sluiten en terug te keren naar Visual Studio.
U hebt nu de hulpprogramma's om uw app na elke wijziging te bouwen en uit te voeren om te controleren of de code nog steeds werkt zoals verwacht. Later laten we u zien hoe u fouten kunt opsporen als dat niet zo is.
De code bewerken
Nu gaan we de code in deze sjabloon omzetten in een rekenmachine-app.
Vervang de inhoud van het
CalculatorTutorial.cppbestand door de volgende code, zodat het overeenkomt met dit voorbeeld:// 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 fileDe code begrijpen
- De
#includeinstructie voegt code uit andere bestanden toe. Soms ziet u mogelijk een bestandsnaam tussen punthaken zoals<iostream>. Met de punthaken wordt de compiler geïnstrueerd om eerst in de standaardsysteemmappen naar hetiostreamheaderbestand te zoeken en zo niet te vinden, om te zoeken in mappen die specifiek zijn voor het project. In andere gevallen ziet u mogelijk een bestandsnaam tussen aanhalingstekens zoals"someHeader.h". Met de aanhalingstekens wordt de compiler geïnstrueerd om het zoeken in de standaardsysteemmappen over te slaan en in plaats daarvan alleen te zoeken in mappen die specifiek zijn voor het project. - Hiermee
using namespace std;wordt aan de compiler aangegeven dat code uit de standaardbibliotheek van C++ moet worden gebruikt in dit bestand. Zonder deze regel moet elk trefwoord uit de bibliotheek worden voorafgegaan doorstd::het bereik aan te geven. Zonder die regel zou elke verwijzingcoutbijvoorbeeld worden geschreven alsstd::cout. Deusinginstructie wordt toegevoegd om het gemakkelijker te maken om toegang te krijgen tot code in een andere naamruimte. - Het
couttrefwoord wordt gebruikt om naar standaarduitvoer in C++ te printen. De<<operator instrueert de compiler om alles wat er rechts van staat naar de standaarduitvoer te sturen. - Het
endltrefwoord is vergelijkbaar met de Enter-toets. Hiermee wordt de regel beëindigd en wordt de cursor naar de volgende regel verplaatst. Het is een betere gewoonte om een\nin de tekenreeks (ingesloten door"") te plaatsen om hetzelfde te doen, omdatendlaltijd de buffer leegt en de prestaties van het programma kan beïnvloeden. Maar omdat dit een zeer kleine app is,endlwordt in plaats daarvan gebruikt. - Alle C++-instructies moeten eindigen met puntkomma's en alle C++-toepassingen moeten een
main()functie bevatten. Deze functie is wat het programma aan het begin uitvoert. Om gebruikt te kunnen worden, moet alle code toegankelijk zijn vanuitmain().
- De
Als u het bestand wilt opslaan, drukt u op Ctrl+S of selecteert u het diskettepictogram op de werkbalk onder de menubalk.
Als u de toepassing wilt uitvoeren, drukt u op Ctrl+F5 of gaat u naar het menu Foutopsporing en selecteert u Starten zonder foutopsporing. Als u een pop-upvenster krijgt met de melding Dat dit project verouderd is, kunt u dit dialoogvenster niet opnieuw weergeven en vervolgens Ja selecteren om uw toepassing te bouwen. Er wordt nu een consolevenster weergegeven dat er als volgt uitziet:
De console-app toont de uitvoer: Calculator Console Application. Voer de bewerking in die moet worden uitgevoerd. Opmaak: a+b | a-b | a*b | a/b. Het proces is beëindigd met code 0 en er is een bericht dat om de console automatisch te sluiten wanneer foutopsporing stopt, u Extra > Opties > Foutopsporing > De console automatisch sluiten wanneer foutopsporing stopt moet inschakelen. Ten slotte is er een bericht om op een willekeurige toets te drukken om dit venster te sluiten.
Sluit het consolevenster wanneer u klaar bent.
Code toevoegen om wat wiskunde uit te voeren
Een klasse lijkt op een blauwdruk voor een object dat iets doet. In dit geval definiëren we een rekenmachineklasse die de wiskundige logica bevat.
Een calculatorklasse toevoegen
Ga naar het menu Project en selecteer Klasse toevoegen. Voer Calculator in het bewerkingsvak Klassenaam in. Kies OK.
Het veld klassenaam bevat de tekstcalculator. Het h-bestandsveld bevat Calculator.h. Het .cpp bestandsveld bevat Calculator.cpp. Het basisklasseveld is leeg. De opties voor inline en Beheerd zijn uitgeschakeld.
Een klasse lijkt op een blauwdruk voor een object dat iets doet. In dit geval definiëren we een rekenmachine en hoe deze moet werken.
Er worden twee nieuwe bestanden toegevoegd aan uw project. Als u al uw gewijzigde bestanden tegelijk wilt opslaan, drukt u op Ctrl+Shift+S. Het is een sneltoets voor Alles>opslaan. Er is ook een werkbalkknop voor Alles opslaan, een pictogram van twee diskettes, te vinden naast de knop Opslaan . Over het algemeen is het raadzaam om Alles regelmatig opslaan uit te voeren, zodat u geen bestanden mist wanneer u opslaat.
De wizard Klasse toevoegen maakt
.hen.cppbestanden met dezelfde naam als de klasse. U ziet een volledige lijst met uw projectbestanden in het Solution Explorer-venster , zichtbaar aan de zijkant van de IDE. Als Solution Explorer niet zichtbaar is, opent u deze in de menubalk: selecteerSolution Explorer weergeven>.
Het zelfstudieproject rekenmachine heeft een knooppunt met header bestanden: Calculator.h, stdafx.h en targetver.h. Een knooppunt Bronbestanden bevat Calculator.cpp, CalculatorTutorial.cpp en stdafx.cpp. Knooppunten voor verwijzingen, externe afhankelijkheden en resourcebestanden zijn zichtbaar maar gesloten.
U kunt een bestand openen door erop te dubbelklikken in het venster Solution Explorer . Dubbelklik op
Calculator.hom deze te openen.Vervang de inhoud van
Calculator.hdoor de volgende code, zodat het bestand er nu zo uitziet:#pragma once class Calculator { public: double Calculate(double x, char oper, double y); };De code begrijpen
- Deze code declareert een nieuwe functie die wordt aangeroepen
Calculate, waarmee wiskundige bewerkingen worden verwerkt voor optellen, aftrekken, vermenigvuldigen en delen. - C++-code is ingedeeld in headerbestanden en
.hbronbestanden (.cpp). Sommige andere bestandsextensies worden ondersteund door verschillende compilers, maar dit zijn de belangrijkste die u moet weten. Functies en variabelen worden meestal gedeclareerd, dat wil zeggen, van een naam en een type voorzien, in headerbestanden, en geïmplementeerd, dat wil zeggen, van een definitie voorzien, in bronbestanden. Voor toegangscode die in een ander bestand is gedefinieerd, kunt u de#include "filename.h"naam van het bestand gebruikenfilename.hdat de variabelen of functies declareert die u wilt gebruiken. - Het is raadzaam om uw code in verschillende bestanden te ordenen op basis van wat het doet, zodat u de code die u later nodig hebt, gemakkelijk kunt vinden. In ons geval definiëren we de
Calculatorklasse afzonderlijk van het bestand met demain()functie, maar we zijn van plan om te verwijzen naar deCalculatorklasse inmain().
- Deze code declareert een nieuwe functie die wordt aangeroepen
Er wordt een groene golvende lijn weergegeven onder
Calculateomdat deCalculatefunctie wel gedeclareerd is, maar niet gedefinieerd is. Beweeg de muisaanwijzer overCalculate, klik op de pijl-omlaag op de gloeilamp en selecteer Definitie 'Berekenen' maken inCalculator.cpp. Er verschijnt een pop-upvenster met een korte weergave van de codewijziging die in het andere bestand is aangebracht. De code is toegevoegd aanCalculator.cpp.
Op dit moment wordt gewoon 0,0 geretourneerd. Laten we die waarde wijzigen. Druk op Esc om het pop-upvenster te sluiten en kies Ja om de wijzigingen op te slaan.
Schakel over naar het
Calculator.cppbestand in het editorvenster. Vervang de inhoud van het bestand door de volgende 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; } }De code begrijpen
- De functie
Calculategebruikt een getal, een operator en een tweede getal. Vervolgens wordt de aangevraagde bewerking uitgevoerd op de twee getallen. - De
switchinstructie controleert welke operator is opgegeven en voert het geval uit dat overeenkomt met die bewerking. Hetdefault:geval is een back-up voor het geval dat de gebruiker een operator typt die niet wordt verwerkt door een van de voorgaandecaseinstructies. Het is raadzaam om ongeldige gebruikersinvoer op een elegantere manier af te handelen, maar dit valt buiten het bereik van deze zelfstudie. - Het
doubletrefwoord geeft een type getal aan dat decimalen ondersteunt. Dit type getal wordt een drijvendekommagetal genoemd, endoublestaat voor een drijvendekommagetal dat extra precisie heeft. Op deze manier kan de rekenmachine zowel decimale wiskundige als gehele getallen verwerken. DeCalculatefunctie is vereist om altijd een drijvende kommanummer met dubbele precisie te retourneren vanwege hetdoublebegin van de code (dit geeft het retourtype van de functie aan), daarom retourneren we 0,0 in het standaardscenario. - Het
.hbestand declareert het prototype van de functie, waarmee de compiler vooraf aangeeft welke parameters het nodig heeft en welk retourtype ervan moet worden verwacht. Het.cppbestand bevat alle implementatiedetails van de functie.
- De functie
Als u de code op dit moment bouwt en uitvoert, wordt de code nog steeds afgesloten nadat u hebt gevraagd welke bewerking moet worden uitgevoerd. Wijzig vervolgens de main functie om enkele berekeningen uit te voeren.
De functies van het klasselid van de rekenmachine aanroepen
Werk de functie
maininCalculatorTutorial.cppals volgt bij:// 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; }De code begrijpen
- Omdat C++-programma's altijd bij de
main()functie beginnen, moeten we onze andere code daar aanroepen, zodat er een#includeinstructie nodig is om die code zichtbaar te maken voor onzemain()functie. - De variabelen
x,yenoperresultworden gedeclareerd om respectievelijk het eerste getal, het tweede getal, de operator en het uiteindelijke resultaat op te slaan. Het is altijd een goede gewoonte om ze een aantal initiële waarden te geven om niet-gedefinieerd gedrag te voorkomen. Dit is wat hier wordt gedaan. - De
Calculator c;regel declareert een object met de naamcals een exemplaar van deCalculatorklasse. De klasse zelf is slechts een blauwdruk voor de werking van rekenmachines; het object is de specifieke rekenmachine die de wiskunde doet. - De
while (true)statement is een lus. De code in de lus wordt telkens opnieuw uitgevoerd zolang de voorwaarde in de()lus waar is. Omdat de voorwaarde gewoon wordt vermeld alstrue, is het altijd waar, waardoor de lus oneindig blijft doorgaan. Als u het programma wilt sluiten, moet de gebruiker het consolevenster handmatig sluiten. Anders wacht het programma altijd op nieuwe invoer. - Het
cintrefwoord accepteert invoer van de gebruiker. De invoerstroom is slim genoeg om een regel tekst te verwerken die is ingevoerd in het consolevenster en deze in elk van de vermelde variabelen in de volgorde te plaatsen. - De
c.Calculate(x, oper, y);expressie roept deCalculateeerder gedefinieerde functie aan en levert de ingevoerde invoerwaarden en de aangevraagde bewerking. De functie retourneert vervolgens een getal dat is opgeslagen inresult. - Ten slotte wordt
resultgeprint naar de console en ziet de gebruiker het resultaat van de berekening.
- Omdat C++-programma's altijd bij de
De code opnieuw bouwen en testen
Test het programma opnieuw om te controleren of alles goed werkt.
Druk op Ctrl+F5 om de app opnieuw te bouwen en te starten.
Enter
5+5en druk op Enter. Controleer of het resultaat 10 is.
Stop het programma door het consolevenster te sluiten.
Fouten opsporen in de app
Omdat de gebruiker vrij is om iets in het consolevenster te typen, gaan we ervoor zorgen dat de calculator onverwachte invoer verwerkt. In plaats van het programma uit te voeren, gaan we in plaats daarvan fouten opsporen, zodat we kunnen controleren wat het stapsgewijs doet.
De app uitvoeren in het foutopsporingsprogramma
Stel
CalcuatorTutorial.cppeen onderbrekingspunt in op deresult = c.Calculate(x, oper, y);regel. Als u het onderbrekingspunt wilt instellen, klikt u naast de lijn in de grijze verticale balk aan de linkerkant van het editorvenster, zodat er een rode stip wordt weergegeven.
Wanneer u nu het programma debugt, pauzeert de executie steeds op die regel. We hebben al een ruw idee dat het programma werkt voor eenvoudige gevallen. Omdat we de uitvoering niet elke keer willen onderbreken, gaan we het onderbrekingspunt voorwaardelijk maken.
Klik met de rechtermuisknop op de rode stip die het onderbrekingspunt vertegenwoordigt en selecteer Voorwaarden. Voer in het invoervak voor de voorwaarde in
(y == 0) && (oper == '/'). Selecteer de knop Sluiten wanneer u klaar bent om de onderbrekingspuntvoorwaarde op te slaan.
Het onderbrekingspunt bevindt zich op de regel: result = c dot Calculate (x, oper, y). 'Voorwaarden...' De optie Voorwaarde is ingeschakeld. De vervolgkeuzelijst Voorwaarden is ingesteld op 'Voorwaardelijke expressie'. De vervolgkeuzelijst voorwaarde is ingesteld op 'Is waar'. De voorwaarde is ingesteld op y == 0 && oper == '/'.
De uitvoering wordt onderbroken op het onderbrekingspunt als een splitsing door 0 wordt geprobeerd.
Als u fouten in het programma wilt opsporen, drukt u op F5 of selecteert u de werkbalkknop Lokaal Windows Debugger met het groene pijlpictogram. Als u in uw console-app iets als '5 - 0' invoert, gedraagt het programma zich normaal en blijft het actief. Als u echter '10 / 0' typt, wordt deze onderbroken op het onderbrekingspunt. U kunt zelfs een willekeurig aantal spaties tussen de operator en getallen plaatsen;
cinis slim genoeg om de invoer correct te parseren.
De gebruiker voert 5 - 0 in. De uitvoer van de app is: Het resultaat is 5. De gebruiker voert vervolgens 10/0 in en omdat aan de voorwaarde voor het voorwaardelijke onderbrekingspunt wordt voldaan, stopt de uitvoering op de regel: result = c.Calculate(x, oper, y);
Nuttige vensters in het foutopsporingsprogramma
Wanneer u fouten in uw code opssport, ziet u mogelijk dat er nieuwe vensters worden weergegeven. Deze vensters kunnen uw foutopsporingservaring helpen. Bekijk het venster Autos . In het venster Autos ziet u de huidige waarden van variabelen die gebruikt zijn vanaf ten minste drie regels voor de huidige regel tot en met de huidige regel. Als u het venster Autos niet ziet, selecteert u in het hoofdmenu Fouten opsporen> inWindows>Auto's.
De waarde van oper is 47 '/', het resultaat is 5, x is 10 en y is 0.
Als u alle variabelen van die functie wilt zien, schakelt u over naar het venster Locals . Omdat dit een kleine functie is, worden in het venster Auto's en Locals dezelfde variabelen weergegeven. Maar u kunt de waarden van deze variabelen wijzigen tijdens foutopsporing om te zien welk effect ze op het programma zouden hebben. In dit geval laten we ze alleen. Open het venster Locals door Locals onderaan het venster Autos te selecteren of door te selecteren in het hoofdmenu Fouten opsporen> inWindows>Locals.
De waarde van oper is 47 '/', het resultaat is 0, x is 10 en y is 0.
U kunt ook de muisaanwijzer op variabelen in de code zelf plaatsen om de huidige waarden te zien waar de uitvoering momenteel is onderbroken. Controleer of het editorvenster de focus heeft door erop te klikken.
Doorgaan met foutopsporing
De gele pijl aan de linkerkant toont het huidige uitvoeringspunt. De huidige regel roept
Calculateaan, dus druk op F11 om in de functie te Stappen, waarmee u naar de hoofdtekst van deCalculatefunctie gaat. Wees voorzichtig met Stap in, omdat u hiermee elke functie op de regel waarin u zich bevindt kunt binnengaan, inclusief functies uit de standaardbibliotheek. Het is prima om in de standaardbibliotheek te gaan, maar misschien wilt u zich meer concentreren op uw code in plaats van bibliotheekcode.Nu het uitvoeringspunt aan het begin van de
Calculatefunctie staat, drukt u op F10 om naar de volgende regel in de uitvoering van het programma te gaan. F10 wordt ook wel Step Over genoemd. U kunt Step Over gebruiken om van regel naar regel te gaan, zonder de details te bekijken van wat er in elk deel van de regel gebeurt. Over het algemeen moet u Step Over gebruiken in plaats van Step Into, tenzij u dieper wilt ingaan op code die elders wordt aangeroepen (zoals u hebt gedaan om de hoofdtekst vanCalculate).Ga verder met het gebruik van F10 om elke regel te doorlopen totdat u teruggaat naar de
main()functie in het andere bestand en stop op decoutregel.Het programma doet wat er wordt verwacht: het neemt het eerste getal en deelt het door de tweede. Plaats de muisaanwijzer op de
coutresultvariabele of kijkresultin het venster Autos . De waarde isinf, wat er niet goed uitziet.
De huidige instructie in het foutopsporingsprogramma is cout << "Result is: " << result << endl; Het resultaat is inf in het venster autos.
Laten we het oplossen. De
coutregel voert elke waarde uit waarin wordt opgeslagenresult, dus wanneer u één regel vooruit stapt met F10, wordt het consolevenster weergegeven:
De uitvoer van de app: Voer de bewerking in die moet worden uitgevoerd. Opmaak: a+b | a-b | a*b | a/b. De gebruiker heeft 5-0 ingevoerd. De uitvoer van de app: Resultaat is: 5. De gebruiker heeft 10/0 ingevoerd. De uitvoer van de app: resultaat is: inf
Dit resultaat is omdat delen door nul niet is gedefinieerd, dus het programma heeft geen numeriek antwoord voor de aangevraagde bewerking.
De fout 'delen door nul' oplossen
Laten we delen door nul beter afhandelen, zodat de gebruiker het probleem gemakkelijker kan begrijpen.
Breng de volgende wijzigingen aan in
CalculatorTutorial.cpp. (U kunt het programma actief laten terwijl u bewerkt, dankzij een foutopsporingsprogramma met de naam Bewerken en Doorgaan). De wijziging is het toevoegen van eenifinstructie diecin >> x >> oper >> y;volgt om te controleren op delen door nul en een bericht aan de gebruiker weer te geven als dit gebeurt. Anders wordt het resultaat afgedrukt:// 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; }Druk eenmaal op F5 . De uitvoering van het programma wordt voortgezet totdat deze moet worden onderbroken om gebruikersinvoer te vragen. Voer opnieuw in
10 / 0. Er wordt nu een nuttiger bericht afgedrukt. De gebruiker wordt gevraagd om meer invoer en het programma wordt normaal uitgevoerd.
Opmerking
Wanneer u code in de foutopsporingsmodus bewerkt, bestaat het risico dat code verouderd raakt. Dit gebeurt wanneer het foutopsporingsprogramma nog steeds uw oude code uitvoert en deze nog niet heeft bijgewerkt met uw wijzigingen. Het foutopsporingsprogramma toont een dialoogvenster om u te informeren wanneer dit gebeurt. Soms moet u mogelijk op F5 drukken om de code te vernieuwen die wordt uitgevoerd. Met name als u een wijziging aanbrengt in een functie terwijl het uitvoeringspunt zich in die functie bevindt, stapt u uit de functie en gaat u er vervolgens weer naartoe om de bijgewerkte code op te halen. Als dat om een of andere reden niet werkt en u een foutbericht ziet, kunt u de foutopsporing stoppen door op het rode vierkant in de werkbalk onder de menu's boven aan de IDE te klikken en vervolgens opnieuw fouten op te sporen door F5 in te voeren of door de groene pijl afspelen naast de stopknop op de werkbalk te kiezen.
Een andere reden waarom bewerken en doorgaan kan mislukken, is dat u naar het hoofdmenu moet gaan en Extra>Opties>Debuggen>Algemeen moet selecteren en ervoor moet zorgen dat bronbestanden exact overeenkomen met de oorspronkelijke versie is ingeschakeld.
Inzicht in de snelkoppelingen voor uitvoeren en debuggen
- F5, of Foutopsporingstarten>, start een foutopsporingssessie, als deze nog niet actief is en voert het programma uit totdat een onderbrekingspunt is bereikt of het programma gebruikersinvoer nodig heeft. Als er geen gebruikersinvoer nodig is en er geen onderbrekingspunt beschikbaar is om te raken, wordt het programma beëindigd en sluit het consolevenster zichzelf wanneer het programma is uitgevoerd. Als uw programma naar de console wordt uitgevoerd, gebruikt u Ctrl+F5 of stelt u een onderbrekingspunt in voordat u op F5 drukt om het venster geopend te houden.
- Met Ctrl+F5 of Foutopsporing> wordt de toepassing uitgevoerd zonder de foutopsporingsmodus in te gaan. Dit is iets sneller dan foutopsporing en het consolevenster blijft geopend nadat het programma is uitgevoerd.
- Met F10, ook wel Step Over genoemd, kunt u code, line-by-line doorlopen en visualiseren hoe de code wordt uitgevoerd en welke variabele waarden er zijn bij elke stap van de uitvoering.
- F11, ook wel Step Into genoemd, werkt op dezelfde manier als Step Over, met uitzondering van functies die worden aangeroepen op de uitvoeringsregel. Als de regel die wordt uitgevoerd bijvoorbeeld een functie aanroept, wordt de aanwijzer door op F11 te drukken naar de hoofdtekst van de functie verplaatst, zodat u de code van de functie kunt volgen die wordt uitgevoerd voordat u teruggaat naar de regel waarop u bent begonnen. Druk op F10 om over de functie-aanroep heen te stappen en naar de volgende regel te gaan; de functieaanroep gebeurt nog steeds, maar het programma stopt niet om te laten zien wat het doet.
De app sluiten
- Als deze nog steeds wordt uitgevoerd, sluit u het consolevenster om de rekenmachine-app te stoppen.
De voltooide app
Gefeliciteerd! U hebt de code voor de rekenmachine-app voltooid en deze gemaakt en er fouten in opgespoord in Visual Studio.