IDENTIFICATION DIVISION.
PROGRAM-ID. EXO-END-IF-06.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-AGE PIC 99 VALUE 00.
01 WS-STATUT PIC X(06) VALUE SPACES.
PROCEDURE DIVISION.
DISPLAY "Entrez un age (00 a 99) : "
ACCEPT WS-AGE
IF WS-AGE >= 18
MOVE "MAJEUR" TO WS-STATUT
DISPLAY "Statut calcule : majeur."
ELSE
MOVE "MINEUR" TO WS-STATUT
DISPLAY "Statut calcule : mineur."
END-IF
DISPLAY "Statut memorise : " WS-STATUT
IF WS-STATUT = "MAJEUR"
DISPLAY "Acces autorise."
END-IF
STOP RUN.
Lecture ligne par ligne
ACCEPT WS-AGE place ce que l’utilisateur tape dans la variable WS-AGE.
Le bloc IF ... ELSE ... END-IF calcule un statut et l’écrit dans WS-STATUT. Le END-IF dit clairement : le test est terminé, on revient au flux normal du programme.
Ensuite seulement, on fait un autre IF qui regarde la valeur mémorisée et décide d’afficher “Accès autorisé.” ou rien. Sans END-IF au bon endroit, ce deuxième test pourrait se retrouver “pris” dans le premier bloc, et le résultat deviendrait incohérent.
Votre micro-exercice
Faites ces 3 modifications pour renforcer le réflexe END-IF :
- Ajoutez un second seuil : si l’âge est supérieur ou égal à 65, affichez “Senior” (dans un nouveau IF après le premier END-IF).
- Ajoutez un message qui s’affiche toujours après les tests : “Traitement termine.” (en dehors de tous les IF).
- Testez avec 17, 18, 64, 65 pour vérifier que chaque message apparaît au bon moment.
Erreur fréquente à éviter
Oublier END-IF dans un programme qui grandit. Au début, on ne voit pas toujours le problème, mais dès qu’on ajoute un deuxième test ou un affichage, on mélange les blocs.
Bon réflexe : dès que vous écrivez un IF, pensez immédiatement à où vous allez placer le END-IF. Dans vos pages de cours, gardez un alignement stable (instructions en zone B) pour visualiser les blocs.