Partage
  • Partager sur Facebook
  • Partager sur Twitter

probléme de lire un fichier

    17 avril 2018 à 14:10:17

    Bonjour, je suis débutant en C++, j'ai trouvé un code et je veux l'adapter à un sujet spécifique 

    Bref je trouve  un problème à lire un fichier avec argument, sachant que j'ai mis un fichier f.txt dans le meme dossier que le main mais après exécution il m'affiche " Error : balise -f non trouvée", je veux savoir si il y ' a une commande qui manque (par exemple il ne faut pas spécifier le chemin d'accès du fichier ) 

    le main :  

    int main(int argc, char *argv[])
    { 
        int i;
         //f = fopen ("f.txt","r") ; 
        if( (i = Pos_Chaine(argv,"-f",argc)) != -1){
            if(i+1>=argc) printf("Error : fichier manquant!\n");
            else{
               f = fopen(argv[i+1],"r");
                if(f==NULL){
                    printf("Le fichier %s ne peut être lu!",argv[i+1]);
                    return 1;
                }
            }
        }
        else{
            printf("Error : balise -f non trouvée\n");
            return 1;
        }
        if(Pos_Chaine(argv,"-v",argc)!=-1) verbose = true;
        if(Pos_Chaine(argv,"-bf",argc) != -1){
            instance s = lire(f);
            brut_force(s);
        }
        if((i = Pos_Chaine(argv,"-lsr",argc)) !=-1){
            if(i+1<argc){
                int param = atoi(argv[i+1]);
                if(param == 0) {
                   printf("Error : -lsr paramèetre non valide");
                   return 2;
                }
                instance s = lire(f);
                lsr(param,s);
            }
            else{
               printf("Error : -lsr paramèetre non valide");
                   return 2;
            }
        }
        if((i = Pos_Chaine(argv,"-lsnr",argc)) !=-1){
            if(i+1<argc){
                int param = atoi(argv[i+1]);
                if(param == 0) {
                   printf("Error : -lsnr paramèetre non valide");
                   return 2;
                }
                instance s = lire(f);
                lsnr(param,s);
            }
            else{
               printf("Error : -lsnr paramèetre non valide");
                   return 2;
            }
        }
        if((i = Pos_Chaine(argv,"-ga",argc)) !=-1){
            if(i+1<argc){
                int nb_generation = atoi(argv[i+1]);
                if(nb_generation == 0) {
                   printf("Error : -ga paramèetre non valide");
                   return 2;
                }
                float prob = 0.3;
                int nb_tournee = 20;
                if(i+2 < argc)
                {
                    prob = atof(argv[i+2]);
                    if(prob ==0)
                        prob = 0.3;
                    else
                    {
                        if(i+3 < argc)
                        {
                            nb_tournee = atoi(argv[i+3]);
                            if(nb_tournee ==0)
                                 nb_tournee = 20;
                        }
                    }
                }
                instance s = lire(f);
                ga(s,nb_tournee,prob,nb_generation,1);
            }
            else{
               printf("Error : -lsnr paramèetre non valide");
                   return 2;
            }
        }
        
      return 0;
    }


    fichier h : 

    typedef struct{
    	char nom[MAX];
    	int nombre;
    	float cor[MAX][3];
    	float distances[MAX*MAX];
    } instance;
    
    typedef struct{
      int nb_villes;
      float longeur;
      int villes[MAX];
    } tournee;
    
    bool verbose = false;
    FILE * f;
    
    float distance (instance s, int i, int j);
    tournee op2(tournee t,instance s,int a,int b);
    void affich_instance(instance s);
    int Pos_Chaine(char **tab,char *ch,int n);
    void supprime_espace_double(char * ch);
    bool egal(tournee t1,tournee t2);
    bool existe(tournee t,tournee tab[MAX],int n);
    void genere_tournees(tournee tab[MAX], instance s, int n);
    void enlever (char *ch1,char ch2[], unsigned int debut);
    void decoupe (char *ch,char c,char tab[MAX][MAX],int *k);
    void calcule_distances (float cor[MAX][3],float distances[MAX],int n);
    instance lire (FILE * f);
    bool next_permutation(int tab[MAX],int taille);
    float distance (instance s, int i, int j);
    void longeur_tournee(tournee * t,instance s);
    tournee genere_tournee(instance s);
    void affich_tournee(tournee t);
    void brut_force(instance s);
    void lsr(int param,instance s);
    void lsnr(int param,instance s);
    tournee op2(tournee t,instance s,int a,int b);
    tournee reconecte_tournee(tournee fille,tournee parent_1,tournee parent_2, instance s);
    void calcul_extrimite(int tab[MAX],tournee t,int * n);
    int rechercher(int ville,tournee t);
    int plus_proche_voisin(int ville,int villes[MAX],tournee t1,tournee t2,instance s,int taille);
    void remplace_tournee(tournee tab[MAX],int taille,tournee t1,tournee t2);
    tournee moins_performant(tournee tab[MAX],int taille);
    tournee meilleur_tournee(tournee tab[MAX],int taille);
    tournee muter(tournee t,instance s);



    • Partager sur Facebook
    • Partager sur Twitter
      17 avril 2018 à 14:21:51

      FirasBoughariou a écrit:

      Bonjour, je suis débutant en C++, j'ai trouvé un code et je veux l'adapter à un sujet spécifique 

      Bref je trouve  un problème à lire un fichier avec argument, sachant que j'ai mis un fichier f.txt dans le meme dossier que le main mais après exécution il m'affiche " Error : balise -f non trouvée", je veux savoir si il y ' a une commande qui manque (par exemple il ne faut pas spécifier le chemin d'accès du fichier ) 

      Bonjour, non tu n'est pas débutant en C++ mais en C (et tout cas c'est ce que montre ton code) 

      Je te propose de regarder ce code https://github.com/alex-lairan/cpp-recueil-code-fr/blob/master/facile/denombrement/main.cpp si tu cherche vraiment à faire du C++, ou à reposter ton message dans la bonne section ;) 

      • Partager sur Facebook
      • Partager sur Twitter

      Architecte logiciel - Software craftsmanship convaincu.

      probléme de lire un fichier

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown