Transcription d’un diagramme sysml d’états/transitions en langage C

Soit un Affichage à deux menus : Menu A et Menu B, le diagramme d’états/transitions est :

Le code C équivalent est :

#include "stdio.h"

// Flèches du clavier numérique : la flèche du haut est le caractère 8 etc.
# define UP '8'
# define DOWN '2'
# define RIGHT '6'
# define LEFT '4'

// Création d'une énumération avec deux valeurs
// La variable 'Menu' contient la défaut 'Menu_A, le premier niveau
enum {Menu_A, Menu_B} Menu = Menu_A ;

char ToucheAppuyee()
{
  char fleche[2]; // une chaîne au lieu d'un caractère -> "bug" dans repl.int
  printf("\nUtilisez une flèche pour naviguer dans le menu :");
  scanf("%s", fleche); // Attention sans '&' car chaîne de caractères
  return (fleche[0]); // retourne uniquement le premier caractère par la fin de ligne '\n'
}

void ActionsMenuA() // Les actions à effectuer dans le Menu A
{
  puts("Menu niveau A");
  if (ToucheAppuyee() == DOWN) Menu = Menu_B; // Si c'est DOWN, on descend
  // dans les autres cas, aucune action
}

void ActionsMenuB()
{
  puts("Menu niveau B");
  if (ToucheAppuyee() == UP) Menu = Menu_A;
}

int main(void) {
  while (1)
  {
    switch (Menu)
    {
      case Menu_A: ActionsMenuA(); break;
      case Menu_B: ActionsMenuB(); break;

    }
  }
  return 0;
}