Bonjour, je me suis fait une fonction qui, à l'aide de fgets, lit mon fichier d'entrée (input.txt) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
KWD1    7
KWD2   YES
KWD3    8
KWD4    0
Ce que je veux faire, c'est une fonction qui vérifie que les mot-clé ont bien été saisi (je veux m'assurer que l'utilisateur a bien par exemple saisi le mot-clé KWD4. Mais j'ai une contrainte qui est que si l'utilisateur saisi YES à KWD2 alors il doit saisir le mot-clé KWD3. Si KWD2 vaut NO alors il n' a pas besoin de saisir le mot-clé KWD3.

Donc, je me suis fait un tableau keywordOK[] où la composante vaut 1 si le mot-clé a été saisi et 0 sinon.

Voici mon code (bien sûr, dans mon programme j'ai bcp plus de mot-clé...). Ici, j'ai directement donné des valeurs à mon tableau keywordOK pour simplifier le post.

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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
#include<stdlib.h>
#include<stdio.h>
 
int main(void)
{
  enum Keyword {KWD1, KWD2, KWD3,KWD4,NB_KWD};
  char const * listkwd[]={"KWD1", "KWD2", "KWD3", "KWD4"};
  int i,err=0;
 
 /* 3 jeux d'essai */
  //int keywordOK[NB_KWD]={1,1,1,1};
  //int keywordOK[NB_KWD]={1,0,1,0};
  int keywordOK[NB_KWD]={1,1,0,0};
 
  /* 
     si keywordOK[i]==0 il y a une erreur, i==KWD1, KWD2,KWD4
     
     si keywordOK[KWD2]==1 alors il faut que keywordOK[KWD3]==1 sinon il y a
     une erreur
   */
 
  for(i=0;i<NB_KWD;++i)
  {
    if(i==KWD3)
    {
      if(keywordOK[KWD2]==1 && keywordOK[KWD3]==0)
      {
        printf("le mot-cle KWD3 doit etre saisi\n");
	err=1;
      }
    }
    else
    {
      if(keywordOK[i]==0)
      {
        printf("le mot-cle %s doit etre saisi\n",listkwd[i]);
	err=1;
      }
    }
  }
 
  if(err==1)
    printf("la saisie des mot-cles est incorrecte\n");
  else
    printf("la saisie des mot-cles est correcte\n");
 
  return 0;
}
J'ai deux questions :
1) j'aimerais faire une fonction CheckKeywords(???) qui fasse la vérification (car ici je ne vous ai présenté qu'une seule "contrainte", mais dans mon "vrai" programme, j'ai une petite vingtaine de mot-clé (température initiale, pression initiale, masse de carburant, température de la paroi du moteur etc...) et une demie-douzaine de "contraintes"). Comment puis-je procédé ? Je n'arrive pas à passer un enum en argument de ma fonction

2) si vous regardez bien mon code, la liste de enum et de listkwd est dans le même ordre. Est-il possible d'éviter d'avoir ces deux variables "redondantes" ?

Merci beaucoup.