lecture de mon fichier d'entrées : problèmes avec les enum et les fonctions
Bonjour, je me suis fait une fonction qui, à l'aide de fgets, lit mon fichier d'entrée (input.txt) :
Code:
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:
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.