scanf
of fscanf
inclusief spaties.
© Harry Broeders.
Deze pagina is bestemd voor studenten van de THRijswijk groepen EPm en EPv die de module SOPX1 volgen.
Bij het inlezen van de karakter array
char string[21];
met
scanf("%20s", string);
wordt alleen het eerste woord (maximaal 20 karakters) ingelezen. Soms wil
je in een karakter array ook spaties inlezen. In plaats van %s
te gebruiken kun je bij het gebruik van scanf
ook precies opgeven
welke karakters als geldige invoer geaccepteerd worden. Met
scanf("%20[A-Za-z]", string);
worden alle letters (hoofd en kleine letters) en spaties die worden ingetyped
in de string string
opgeslagen. De invoer stopt als iets anders
dan een letter of spatie wordt ingevoerd of als er 20 geldige karakters zijn
ingevoerd.
Als je bijvoorbeeld een string van maximaal 21 karakters wilt inlezen die kan bestaan uit letters, cijfers, punten, komma's, vraagtekens, dubbele punten, punt komma's, ronde haakjes, min tekens of spaties dan kan dit als volgt:
scanf("%20[A-Za-z0-9.,?:;()\- ]", string);
Merk op dat het minteken als \-
moet worden opgegeven omdat
het anders de speciale betekenis "tot en met" heeft (zoals bij
A-Z
).
Het onderstaande programma laat zien hoe je op deze manier strings kunt inlezen.
Zie voor meer informatie over scanf
en printf
de
help files van Borland.
De functie aanroep
fflush(stdin);
zorgt ervoor dat alle karakters die nog in het invoerbuffer staan worden weggespoeld.
In het volgende programma worden de gegevens van een aantal personeelsleden ingelezen en afgedrukt.
#include <stdio.h>
int main() {
int aantal=0;
int teller;
struct {
char naam[21];
char adres[26];
int leeftijd;
int salaris;
} rij[20];
/* Invoer */
do {
printf("Hoeveel personen wilt u invoeren? (max 20) ");
fflush(stdin);
}
while (scanf("%d", &aantal)!=1 || aantal<1 || aantal>20);
for (teller=0; teller<aantal; ++teller)
{
do {
printf("Invoer persoon %d Naam : ", teller);
fflush(stdin);
} while (scanf("%20[A-Za-z.@+()\- ]", rij[teller].naam)!=1);
do {
printf(" Adres : ");
fflush(stdin);
} while (scanf("%25[A-Za-z0-9.,?:/()\- ]", rij[teller].adres)!=1);
do {
printf(" Leeftijd: ");
fflush(stdin);
} while (scanf("%d", &rij[teller].leeftijd)!=1);
do {
printf(" Salaris : ");
fflush(stdin);
} while (scanf("%d", &rij[teller].salaris)!=1);
}
/* Uitvoer */
printf("\n");
printf("%2s | %-20s | %-25s | %5s | %8s\n", "Nr", "Naam", "Adres", "Lft", "Sal");
for (teller=0; teller<aantal; ++teller) {
printf(
"%02d | %-20s | %-25s | %5d | %8d\n",
teller,
rij[teller].naam,
rij[teller].adres,
rij[teller].leeftijd,
rij[teller].salaris
);
}
fflush(stdin);
getchar();
return 0;
}
Uitvoer van dit programma:
De ingetypte invoer is geel weergegeven.