© Harry Broeders.
Deze pagina is bestemd voor studenten van de Haagse Hogeschool - TH Rijswijk/Academie voor Engineering.
Als je in C programma een getal inleest met scanf
dan gebeuren
er vreemde dingen als je in plaats van een getal letters intypt. Bijvoorbeeld:
#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;
}
Als je dit programma uitvoert en als invoer het woord Hallo
intypt dan verschijnt de volgende uitvoer:
Geef een geheel getal: Hallo Het getal is 2. Druk op de Enter toets om dit window te sluiten.
Dit kun je vrij eenvoudig voorkomen door de returnwaarde van de functie
scanf
te testen. Deze functie geeft de integer waarde
EOF
terug als er iets fout gaat bij het inlezen. Anders geeft
de functie het aantal variabelen terug dat succesvol is geconverteerd en
ingelezen.
Voorbeeld:
#include <stdio.h>
int main() {
int getal, ret;
do {
printf("Geef een geheel getal: ");
ret=scanf("%d", &getal);
if (ret==0) {
printf("Dat was geen getal!\n");
printf("Maar het karakter %c.\n", getchar());
}
else if (ret==EOF) {
printf("Er is een fout opgetreden bij het lezen!\n");
}
}
while (ret!=1);
printf("Het getal is %d.\n", getal);
printf("Druk op de Enter toets om dit window te sluiten.");
fflush(stdin);
getchar();
return 0;
}
Als je dit programma uitvoert en als invoer het woord Hallo
intypt dan verschijnt de volgense uitvoer:
Geef een geheel getal: Hallo Dat was geen getal! Maar het karakter H. Geef een geheel getal: Dat was geen getal! Maar het karakter a. Geef een geheel getal: Dat was geen getal! Maar het karakter l. Geef een geheel getal: Dat was geen getal! Maar het karakter l. Geef een geheel getal: Dat was geen getal! Maar het karakter o. Geef een geheel getal:
Als je daarna het getal 23 invoert dan verschijnt de uitvoer:
Geef een geheel getal: 23 Het getal is 23. Druk op de Enter toets om dit window te sluiten.
Zeer uitgebreide informatie over de functie scanf
kun je vinden
op:
http://www.opengroup.org/onlinepubs/009695399/functions/scanf.html.