Een aantal lessen terug hebben we gezien hoe we statements kunnen herhalen met behulp van de for-lus. De for-lus is erg geschikt als we van tevoren kunnen bepalen hoe vaak de lus uitgevoerd moet worden. Soms weten we dat niet en hangt het aantal herhalingen af van wat er binnen de lus gebeurd.
Met de do-lus kunnen we herhalingen uitvoeren totdat er een bepaalde situatie optreedt. Het volgende programma vraagt telkens invoer aan de gebruiker. Zolang de gebruiker een getal groter dan 0 invoert, voert het programma de lus uit. Zodra de gebruiker een getal kleiner dan of gelijk aan 0 invoert, houdt de lus op en stopt het programma.
#include <iostream> using namespace std; // het programma start hier void main() { // declareer variabele om invoer op te slaan int myInput; // herhaal totdat invoer kleiner dan of gelijk is aan 0 do { // vraag om invoer cin << myInput; } while (myInput > 0); // wacht op enter system("pause"); }
De code die herhaalt moet worden staat tussen accolades. Zolang het statement dat achter while staat waar is, wordt de lus uitgevoerd. In het voorbeeld: zolang het ingevoerde getal groter is dan 0, wordt de lus uitgevoerd.
Tot nu toe zijn we er altijd van uitgegaan dat de gebruiker juiste invoer levert. Dus als we een geheel getal verwachten, dan voert de gebruiker geen tekst in. In de praktijk gaat dat natuurlijk niet op. We zoeken dus een manier om te controleren of de invoer van de gebruiker geldig is.
Het volgende programma verwacht dat de gebruiker gehele getallen invoert. Zodra hij iets ongeldigs invoert - een tekst of een gebroken getal - dan stopt het programma.
#include <iostream> using namespace std; // het programma start hier void main() { // declareer variabele om invoer op te slaan int myInput; // herhaal zolang invoer geldig is do { // vraag om invoer cin >> myInput; } while (cin.good()); // wacht op enter system("pause"); }
cin.good()
geeft dus true
als de invoer geldig
is en false
als de invoer ongeldig is. Je kunt ook gebruik
maken van cin.bad()
dat true
teruggeeft als de
invoer ongeldig is en false
als de invoer geldig is.
Variabelen hebben een beperkt gebied waarbinnen ze geldig zijn. Dit noemen we de scope van de variabele. De scope van een variabele wordt bepaald door de plaats waar de variabele wordt gedeclareerd. De variabele is geldig binnen dezelfde accolades als zijn declaratie.
void main() { int i; do { int j; } while (condition); }
In bovenstaand stukje (pseudo)code is i
geldig binnen de
hele functie main
en j
alleen binnen de do-lus.
Omdat de conditie die je bij while opgeeft buiten de accolades van de lus
staat, mag hij de variabele j
niet gebruiken, maar de variabele
i
wel.
Een variabele die ergens binnen accolades staat, noemen we een lokale
variabele. We kunnen een variabele ook buiten alle accolades zetten. In dat
geval spreken we van globale variabelen. In het onderstaand voorbeeld is
myGlobal
een globale variabele.
// declareer een globale variabele int myGlobal; // het programma start hier void main() { // declareer een lokale variabele int myLocal; // myLocal is geldig in deze functie myLocal = myGlobal; // dit is geen probleem }
De scope van een globale variabele is het hele programma. Een globale variabele kun je dus overal in je programma gebruiken.