Lecture fichier C++

Bonjour,
je fais du C/C++ sur linux
Je souhaiterai faire une fonction qui me permet de lire un fichier au format nom_joueur.txt que j'ai sauvegardé avant.
j'effectue en commande :
strcat (joueur1.nom, ".txt");
j'ai donc dans joueur.nom : Toto.txt (si le nom du joueur est toto!)
J'ai verifié j'ai bien dans mon dossier ce fichier.
Je souhaite donc ouvrir ce fichier en faisant :
ifstream lecture (joueur1.nom);
Quand je compile : erreur de segmentation!
J'ai vérifié en faisant des tests le probleme est qu'il ne lit pas du tout le fichier.
Comment faire?Merci

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    à la place de cerr, tu peu mettre perror().
    compile avec l'option de debug (-g je croi)
    puis lance ton programme avec gdb :
    gdb *.exe
    run

    il te dira où est exactement ton erreur de segmentation.
    iflect>>type;//lit le type
    peut être source d'erreur, car 'type' est de type char, donc il faut que dans ton fichier la premiere donné soit un carctère unique.
    1. Contributeur
      Salut.
      quel est le type de joueur1.nom ?
      fait une sortie de joueur1.nom voir si il est bien modifier.
      Tu fait du C++, donc autant utiliser <string> de la STL.
      string joueur1.nom;//tu met le type string à nom
      donc ensuite,
      fstream lecture((jouer1.nom+".txt").c_str(),std::ios::in);
      ensuite, fait une sortie de lecture, vérifier qu'il n'est pas nul (que l'ouverture a bien fonctionner)
      de la façon suivante :
      if (!lecture) cerr<<"pb d'ouverture\n";// technique vue l à : https://en.cppreference.com/w/cpp/io/basic_fstream/open
      bonne chance
      1. j'ai essayé mais ca ne marche pas non plus!
        En fait je fais du C/C++ pas vraiment du C++ (pas vu cerr, str()...)
        voici ma fonctionen entier :

        void fonction (joueur joueur1)

        {
        char type, ligne, direction;
        int colonne, nombre, i, t;
        strcat (joueur1.nom, ".txt");
        cout<<"fichier "<<joueur1.nom<<endl;
        ifstream iflect (joueur1.nom);
        for (i = 0; i<5; i++)
        {
        iflect>>type;//lit le type
        cout<<"type "<<type;
        iflect>>nombre;//lit le nombre de bateau de ce type
        cout<<"nombre : "<<nombre;
        while (nombre>0) //tant qu'il y a des bateaux
        {
        iflect>>ligne;
        cout<<"ligne "<<ligne;
        iflect>>colonne;
        iflect>>direction;
        //place le bateau
        placer_bateau(ligne, colonne, direction, type, joueur1.mon_tab);
        nombre--;
        }
        }
        iflect.close();
        }

        typedef struct {
        char nom[20];
        char ** mon_tab;
        char ** mes_tirs;
        flotte flotte_adversaire;
        } joueur;
        1. salut
          j'amerai bien savoir ou d'envoyer des nouveaux programme écrit en c ou des documents pour un débitant concernant "formation"
          mes salutations