Bonjour à tous,

Je débute en Pascal et je ne comprends pas le comportement de ce petit programme:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PROGRAM menu;
TYPE
  EnsReponses = SET OF CHAR;
VAR
  Reponses : EnsReponses;
  reponse: CHAR;
BEGIN
  Reponses := ['A','B','C'];
  WRITELN('Introduisez un caractère puis ENTER.');
  WRITE('A,B ou C: ');
  READ(reponse);
  WHILE NOT (reponse IN Reponses) DO BEGIN
    WRITE('[',reponse,'] Réponse erronée, recommencez: ');
    READ(reponse);
  END;
  WRITELN('ok')
END.
Quand le caractère introduit est correct, ça fonctionne,

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
gv@spirou:~$ ./menu
Introduisez un caractère puis ENTER
A,B ou C: A
ok
mais quand il est incorrect, je ne comprends pas pourquoi il répète 2x la boucle. C'est pour essayer de comprendre que j'ai introduit la variable reponse dans l'affichage au sein de la boucle, et c'est ainsi que je vois qu'apparaît un saut de ligne entre les crochets.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
gv@spirou:~$ ./menu
Introduisez un caractère puis ENTER
A,B ou C: a
[a] Réponse erronée, recommencez: [
] Réponse erronée, recommencez: 
[
] Réponse erronée, recommencez: A
ok
Remarquez qu'au 2ème essai, j'ai tapé ENTER directement.

Je travaille avec freepascal 2.4.0-2 sous Debian.

Pourrait-on m'expliquer ce comportement ?

Merci d'avance,

Gauthier