Bonjour, je me suis fait une fonction qui, à l'aide de fgets, lit mon fichier d'entrée (input.txt) :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 KWD1 7 KWD2 YES KWD3 8 KWD4 0
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.
J'ai deux questions :
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; }
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.
Partager