© Éditions Eyrolles
63
chapitre n° 4
Les entrées-sorties conversationnelles
En revanche, dans le cas où le format comporte plus de codes que la liste, on cherchera à
affecter des valeurs à des emplacements (presque) aléatoires de la mémoire. Là encore, les
conséquences en seront pratiquement imprévisibles.
2.10.2 Mauvaise réponse de l’utilisateur
Nous avons déjà vu ce qui se passait lorsque l’utilisateur fournissait trop ou trop peu d’information par rapport à ce qu’attendait scanf.
De même, nous avons vu comment, en cas de rencontre d’un caractère invalide, il y avait arrêt
prématuré. Dans ce cas, il faut bien voir que ce caractère non exploité reste dans le tampon
pour une prochaine fois. Cela peut conduire à des situations assez cocasses telles que celle qui
est présentée dans cet exemple (l’impression de ^C représente, dans l’environnement utilisé,
une interruption du programme par l’utilisateur) :
Fort heureusement, il existe un remède à cette situation. Nous ne pourrons vous l’exposer
complètement que lorsque nous aurons étudié les chaînes de caractères.
Boucle infinie sur un caractère invalide
main()
{
int n ;
do
{ printf ("donnez un nombre : ") ;
scanf ("%d", &n) ;
printf ("voici son carré : %d\n", n*n) ;
}
while (n) ;
}
donnez un nombre : 12
voici son carré : 144
donnez un nombre : &
voici son carré : 144
donnez un nombre : voici son carré : 144
donnez un nombre : voici son carré : 144
donnez un nombre : voici son carré : 144
donnez un nombre : voici son carré : 144
^C
Delannoy Livre.book Page 63 Mercredi, 6. mai 2009 4:26 16
63
chapitre n° 4
Les entrées-sorties conversationnelles
En revanche, dans le cas où le format comporte plus de codes que la liste, on cherchera à
affecter des valeurs à des emplacements (presque) aléatoires de la mémoire. Là encore, les
conséquences en seront pratiquement imprévisibles.
2.10.2 Mauvaise réponse de l’utilisateur
Nous avons déjà vu ce qui se passait lorsque l’utilisateur fournissait trop ou trop peu d’information par rapport à ce qu’attendait scanf.
De même, nous avons vu comment, en cas de rencontre d’un caractère invalide, il y avait arrêt
prématuré. Dans ce cas, il faut bien voir que ce caractère non exploité reste dans le tampon
pour une prochaine fois. Cela peut conduire à des situations assez cocasses telles que celle qui
est présentée dans cet exemple (l’impression de ^C représente, dans l’environnement utilisé,
une interruption du programme par l’utilisateur) :
Fort heureusement, il existe un remède à cette situation. Nous ne pourrons vous l’exposer
complètement que lorsque nous aurons étudié les chaînes de caractères.
Boucle infinie sur un caractère invalide
main()
{
int n ;
do
{ printf ("donnez un nombre : ") ;
scanf ("%d", &n) ;
printf ("voici son carré : %d\n", n*n) ;
}
while (n) ;
}
donnez un nombre : 12
voici son carré : 144
donnez un nombre : &
voici son carré : 144
donnez un nombre : voici son carré : 144
donnez un nombre : voici son carré : 144
donnez un nombre : voici son carré : 144
donnez un nombre : voici son carré : 144
^C
Delannoy Livre.book Page 63 Mercredi, 6. mai 2009 4:26 16
