© Harry Broeders.
Deze pagina is bestemd voor studenten van de Haagse Hogeschool - TH Rijswijk/Academie voor Engineering.
Als je in wxDev-C++ een C programma schrijft dat uitvoer produceerd dan wordt het window waarin deze uitvoer verschijnt meteen weer gesloten. Dat is natuurlijk niet zo handig! Probeer het volgende programma maar eens te compileren en uit te voeren met wxDev-C++.
#include <stdio.h>
int main() {
printf("FLITS!\n");
return 0;
}
Als je dit programma uitvoert dan verdwijnt de uitvoer meteen. In het boek
"De taal C van PSD tot C programma" van Daryl McAllister wordt dit opgelost
door, voordat de functie main
wordt afgesloten (door
return
0;
), de functie
getch()
aan te roepen.
#include <stdio.h>
#include <conio.h>
int main() {
printf("FLITS!\n");
printf("Druk op een willekeurige toets om dit window te sluiten.");
getch();
return 0;
}
De functie getch
wacht totdat er een willekeurig karakter wordt
ingetoetst en leest dit karakter in. Het nadeel van deze oplossing is dat
de functie niet is opgenomen in de standaard C library maar in de
conio library. Dat wil
dus zeggen dat dit programma misschien niet meer werkt als we een andere
C compiler gebruiken. Het is daarom beter om de standaard C functie
getchar()
aan te roepen.
#include <stdio.h>
int main() {
printf("FLITS!\n");
printf("Druk op de Enter toets om dit window te sluiten.");
getchar();
return 0;
}
De functie getchar
leest, net zoals getch
, een
karakter in. Deze functie start echter pas met inlezen als de gebruiker een
hele regel heeft ingevoerd. Daarom moet je in dit geval op de Enter toets
drukken om het uitvoerwindow te sluiten.
getch
of getchar
en toch verdwijnt mijn
uitvoerwindow te snel. Hoe kan dat?
Als je programma niet alleen uitvoer produceert maar ook data inleest dan
is het gebruik van één aanroep van getchar()
of
getch()
niet meer voldoende! Probeer maar:
#include <stdio.h>
int main() {
int getal;
printf("Geef een geheel getal: ");
scanf("%d", &getal);
printf("Het getal is %d.\n", getal);
printf("Druk op de Enter toets om dit window te sluiten.");
getchar();
return 0;
}
Nu sluit het window meteen nadat je het getal hebt ingetypt!
De functie scanf
die het getal inleest begint pas met inlezen
nadat de gebruiker op Enter heeft gedrukt. Het enter karakter zelf wordt
door de functie scanf
echter niet ingelezen. De functie
getchar
leest dus dit enter karakter meteen in en wacht niet
op verdere invoer. Er zijn verschillende oplossingen voor dit probleem:
Gebruik een extra aanroep getchar()
om het enter karakter dat
de functie scanf
nog niet heeft ingelezen alsnog in te lezen.
#include <stdio.h>
int main() {
int getal;
printf("Geef een geheel getal: ");
scanf("%d", &getal);
printf("Het getal is %d.\n", getal);
printf("Druk op de Enter toets om dit window te sluiten.");
getchar();
getchar();
return 0;
}
Gebruik de functie fflush
om alle invoer die nog niet is ingelezen
weg te gooien voordat je getchar()
aanroept.
#include <stdio.h>
int main() {
int getal;
printf("Geef een geheel getal: ");
scanf("%d", &getal);
printf("Het getal is %d.\n", getal);
printf("Druk op de Enter toets om dit window te sluiten.");
fflush(stdin);
getchar();
return 0;
}
Vertel de functie scanf
dat de enter na het getal ook ingelezen
moet worden
#include <stdio.h>
int main() {
int getal;
char afval;
printf("Geef een geheel getal: ");
scanf("%d%c", &getal, &afval);
printf("Het getal is %d.\n", getal);
printf("Druk op de Enter toets om dit window te sluiten.");
getchar();
return 0;
}
Probeer maar eens in plaats van een getal gevolgd door een enter, een getal, dan een spatie en dan pas een enter in te voeren. Oplossing 2 is de enige oplossing die dan nog correct werkt! Oplossing 2 is dus de beste oplossing.