Bonjour à tous,
je travaille sur un projet de programmation pour mes études pour créer un serveur "vocal" (entre guillemets car les messages s'afficheront sur l'écran).
J'ai donc dû créer des structures de données :
L'automate est composé de plusieurs états. Les états sont numérotés de 0 à MAX_ETATS-1 maximum, l'état 0 correspond à l'état d'entrée. Chaque état peut contenir : une chaîne de caractère correspondant à un message court, et/ou un message long enregistré dans un fichier texte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 typedef struct { char msgLong[100]; char msgCourt[300]; }Etat; typedef struct { char M[MAX_ETATS][MAX_ETATS]; Etat E[MAX_ETATS]; } Automate;
On considérera que le message long (s'il existe) est toujours annoncer avant le message court. Les messages courts (sur l'exemple du serveur vocal de la météo) correspondent à l'énoncé des choix possibles de l'état. Les messages longs correspondent par exemple aux prévisions. Le texte des prévisions à annoncer est enregistré dans un fichier texte.
Le format d'un fichier d'automate est le suivant :
* la première ligne contient le nombre d'états de l'automate
* pour chaque état :
- numéro de l'état
- nom du fichier du message long s'il existe sinon ligne vide
- message court sur une ligne
- suite de lignes contenant les couples touche/état destination à partir de cet état. Cette suite est terminée par le caractère '>' sur une ligne.
Je crée d'abord une procédure qui me permet de charger un fichier extérieur comportant des données spécifique à un "numéro de téléphone". L'utilisateur devra d'abord taper le numéro, j'ouvre le fichier, lis et stocke au bon endroit les infos.
Mon souci se trouve au moment où je récupère le message court si le message long n'existe pas :
C'est le dernier "fgets" qui pose problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 if (nbEtat<=MAX_ETATS) { while (fscanf(f,"%d",&numeroEtat)!=EOF) { printf("Le numero de l'etat est : %d \n",numeroEtat); /* Lecture de la ligne */ car=getc(f); fgets(message,299,f); /* Vérification de la ligne vide */ if (message[0]=='\n') /* Mémorisation du message court */ { fgets((*aut).E[numeroEtat].msgCourt,299,f); printf("MESSAGE COURT DE L'ETAT %d : %s \n",numeroEtat,(*aut).E[numeroEtat].msgCourt); }
Mais comment résoudre ce souci ?
PS : je travaille sous Dev C++ chez moi, mais sur linux au bahut.
Partager