Programmes qui modifient leurs comportements dans les boucles if
Bonsoir à tous,
Pour un projet, je dois préparer un programme pouvant recevoir des arguments en ligne de commande depuis le shell. Voici le fichier main.c en question :
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
| #include <stdio.h>
#include <string.h>
#include "definitions2.h"
int main(int argc, char* argv[]) {
docShell("graph2.adj");
if (strcmp(argv[2],"-a")==0) { // entrée -a fichier .adj
if (strcmp(argv[1],"-dot")==0) { //sortie format .dot
T_graphMD* g=fileToGraph(argv[3]);
printf("argv[3] : _%s_\n",argv[3]);
char*filename=nomGraphe(argv[3],"dot");
printf("filename : _%s_\n",filename);
showGraph(filename, g);
docShell(filename);
}
else { // sortie format -la liste d'adjacence
T_graphMD* g=fileToGraph(argv[3]);
T_graphLA *g_=MDtoLA(g);
int i;
for (i=0;i<g_->nbVertices;i++) {
showList(g_->tAdj[i]);
}
char* filename=nomGraphe(argv[3],"la");
printf("filename : _%s_\n",filename);
LAtoFile(g_, filename);
}
}
if (strcmp(argv[2],"-l")==0) { // entrée -l fichier liste d'adjacence
if (strcmp(argv[1],"-dot")==0) { // sortie format .dot
T_graphLA* g=fileToLA(argv[3]);
T_graphMD * g_=LAtoMD(g);
char* filename=nomGraphe(argv[3],"ladot");
showGraph(filename, g_);
printf("filename : %s\n",filename);
docShell("graph2.adj"); //normalement c'est <<docShell(filename);>>, mais pour tester j'appelle la fonction avec ce fichier
}
else { // sortie format -adj
T_graphLA *g=fileToLA("./graph2.la");
T_graphMD *g_=LAtoMD(g);
char*filename=nomGraphe(argv[3],"adj");
graphToFile(g_,filename);
}
}
} |
Il utilise de nombreux autres programmes mais le problème que je rencontre ne concerne que certains d'entre eux. Je pense que le problème est similaire pour chacun de mes soucis alors je vais d'abord vous en exposer un premier en espérant que sa résolution m'aide à corriger mes autres soucis.
Prenons la fonction docShell appelée dès le début : elle recopie tout simplement sur le shell un fichier comme "graph2.dot" que je vous mets ci-dessous :
Code:
1 2 3 4
| 0 9 3 i
i 0 2 i
i i 0 4
i 1 i 0 |
Voici le code de docShell :
Code:
1 2 3 4 5 6 7 8 9
| void docShell(const char* filename) {
FILE * fp=fopen(filename,"r");
CHECK_IF(fp = fopen(filename, "r"), NULL, "fopen docShell");
char c;
while ( (c=fgetc(fp)) != EOF) {
printf("%c", c);
}
fclose(fp);
} |
Cette fonction est également appelée à la ligne 36 du fichier main.c. Voilà ce que je remarque : lorsque j'exécute main, par exemple avec la commande << ./main -dot -l ./graph2.la >>, un premier affichage de "graph2.adj" s'effectue correctement. Le second, en revanche (l'affiche demandé dans l'appel de la boucle if ligne 36) ne s'effectue pas. Pourtant, il s'agit du même fichier et mon fopen fonctionne.
Avez-vous idée de ce qui pourrait causer cela ? Peut-être est-ce ma manière de gérer les lignes de commande ?
Je vous remercie beaucoup pour vos éclairages, j'espère que mon message est suffisamment clair et je serai ravi de le préciser si besoin est.
Vous souhaitant une bonne soirée,
louisandrex