Personnellement j'utiliserais une structure :
struct MenuItem {
char* name; // nom de l'entrée du menu
bool open; // afficher les sous-menus ?
MenuItem* subMenu; // liste chainée du sous-menu
MenuItem* nextMenuItem; // élément suivant dans la liste
};
après tu créer une liste chainée pour le premier niveau du menu
puis des sous listes pour les niveaux inférieurs et ainsi de suite:
MenuItem* menu --> [#] --> [#] --> [#] --> NULL
|
v
[#] --> NULL
|
v
[#] --> NULL
|
v
NULL
Pour afficher le menu, tu parcours ta liste, en parcourant aussi les sous listes si le flag open est vrai. à chaque passage à un niveau inférieur tu peux incrémenter une valeur indiquant l'indentation à utiliser pour afficher le nom de l'entrée traitée. Je verais bien une fonction récursive pour réaliser cette tâche.
D'un point de vue de l'interface, fouine dans tes librairies tu trouveras bien quelque chose d'intéressant. Ou bien si tu es un barbare, tu peux te faire ta propre librairie d'affichage de menu en utilisant les caractères d'échappement ( e[2j , ou quelque chose dans le genre, je ne me rappelle plus très bien)
enjoy !
Yoann