IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Aidez moi svp: mettre le contenu d'un fichier dans un tableau 2D


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Aidez moi svp: mettre le contenu d'un fichier dans un tableau 2D
    Bonjour,
    Comme projet nous devons programmer un taquin, et l'état initial et final doivent être chargés à partir d'un fichier. J'ai fait le code suivant mais ca ne marche pas ((
    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
     
    void load_game()//fonction qui charge le jeu
    {
     
     
    ifstream fichier("taquin.txt", ios::in); // on ouvre le fichier en lecture
     {
     
    int l=0;//ligne
    int c=0;//colonne
     int nombre_case=0;//nombre de case
     
    char a;
             char caractere[20];
            if(fichier)  // si l'ouverture a réussi
            {
                while(fichier.eof()==false)
            {
     // notre variable où sera stocké le caractère
     
                fichier.get(a);  // on lit un caractère et on le stocke dans caractere
                        if(a=='\n')//si dans le fichier on passe a la ligne suivante
                        {c++;//les colonnes augmentent
     
                         l=0;//on revient au debut de la ligne
                        }
                    if(a!='\n')//si dans le fichier on ne passe a la ligne suivante
     
                    {
                    board[c][l]=a;//on enregistre dans le tableau 
                        l++;
                    nombre_case++; //}
    cout<<nombre_case//le nombre de case augment;
                     // on ferme le fichier
            }
     
           }
           else  // sinon
                    {cout<< "Impossible d'ouvrir le fichier !" << endl;
                    }
                    fichier.close();
      d=nombre_case;//d est un variable global qui contient le nombre de case
                }
     
    }

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,



    ca ne marche pas
    n'est pas suffisant pour que nous sachions quel est votre problème.

    Qu'est-ce qui vous fait dire que cela ne marche pas?
    - Une erreur/des warnings du compilateurs ?
    Montrez-les nous.
    - Une erreur de segmentation?
    Utilisez un débogueur ou placez des std::cout pour identifier la ligne fautive.
    Ensuite si votre problème persiste, indiquez nous cette ligne.
    - Des résultats incohérents ?
    Utilisez un débogueur ou utilisez des std::cout pour vérifier les valeurs de vos variables pendant l'exécution de votre programme.
    Donnez-nous ensuite les résultats obtenus et les résultats attendus.

    Sur ce bonne nuit.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci de votre aide, le programme compile mais je crois qu'il y a un debordement,
    j'ai affiché la valeur de la variable nombre_case qui m'a donné 638!!! c'est impossible mon fichier ne contient que 16 caracteres comme suit:

    ABCD
    EFGH
    IJKL
    MNOP

    normalement je devrais obtenir 16.

  4. #4
    Membre éprouvé
    Homme Profil pro
    R&D imagerie 3D / prog embarquée
    Inscrit en
    Mars 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : R&D imagerie 3D / prog embarquée
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 417
    Points : 1 247
    Points
    1 247
    Par défaut
    Salut,

    Tout d'abord une petit remarque. Comme l'a dit Neckara, il faut mettre ton code dans les balises, mais ce serait aussi très apprécié que le code soit lisible. C'est à dire correctement indenté, avec des retour à la ligne quand il faut et seulement quand il faut. Nous demandons ça pour pouvoir t'aider plus facilement. Nous prenons tous sur notre temps personnel pour répondre et quand tu vois ça, t'as envie de passer à une autre question.
    De plus, donnes nous le code qui fonctionne le mieux. Sur celui que tu as posté il manque 1 } et 1 ;. Je ne peux donc pas faire un copier/coller pour tester ton code directement.

    Pour régler ton problème, il faudrait que tu postes le fichier "taquin.txt". Parce que ton code à l'air fonctionnel. À l'oeil je vois rien et je l'ai testé sans pb. À mon avis il y a plus de chose que tu crois dans "taquin.txt". Peut être des caractères invisibles.

    Note que ce n'est pas très élégant d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          if(a=='\n')//si dans le fichier on passe a la ligne suivante
          {
            ...
          }
     
          if(a!='\n')//si dans le fichier on ne passe a la ligne suivante
          {
            ...
          }
    Avec un "else" c'est mieux. Tu ne testes qu'une fois ta condition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
          if(a=='\n')//si dans le fichier on passe a la ligne suivante
          {
            ...
          }
          else
          {
            ...
          }
    Par ailleurs, quand on utilise un stream on vérifie que tout ce passe bien au fil de la lecture. Tu devrais donc plutôt avoir un truc du genre:
    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
          fichier.get(a);  // on lit un caractère et on le stocke dans caractere
          if(!fichier.bad())
          {
            if(a=='\n')//si dans le fichier on passe a la ligne suivante
            {
              c++;//les colonnes augmentent
              l=0;//on revient au debut de la ligne
            }
            else
            {
              //board[c][l]=a;//on enregistre dans le tableau 
              l++;
              nombre_case++; //}
              cout<<nombre_case<<endl;//le nombre de case augment;
              // on ferme le fichier
            }
          }
          else
          {
            // Ooops problème d'io sur le fichier
          }
    Voici le code que j'ai testé:
    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
      ifstream fichier("taquin.txt", ios::in); // on ouvre le fichier en lecture
     
      int l=0;//ligne
      int c=0;//colonne
      int nombre_case=0;//nombre de case
      char a;
      char caractere[20];
     
      if(fichier)  // si l'ouverture a réussi
      {
        while(fichier.eof()==false)
        {
          fichier.get(a);  // on lit un caractère et on le stocke dans caractere
          if(a=='\n')//si dans le fichier on passe a la ligne suivante
          {
            c++;//les colonnes augmentent
            l=0;//on revient au debut de la ligne
          }
     
          if(a!='\n')//si dans le fichier on ne passe a la ligne suivante
          {
            //board[c][l]=a;//on enregistre dans le tableau 
            l++;
            nombre_case++; //}
            cout<<nombre_case<<endl;//le nombre de case augment;
              // on ferme le fichier
          }
        }
      }
      else  // sinon
      {
        cout<< "Impossible d'ouvrir le fichier !" << endl;
      }
      fichier.close();
    Et "taquin.txt" est en PJ
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Mettre le contenu d'un fichier dans un tableau
    Par Auzingueur dans le forum Débuter
    Réponses: 7
    Dernier message: 16/12/2013, 10h04
  2. Réponses: 3
    Dernier message: 28/05/2009, 15h27
  3. Mettre le contenu d'un .log dans un tableau
    Par KraD_74 dans le forum Langage
    Réponses: 8
    Dernier message: 12/05/2009, 14h15
  4. [Stream] Mettre le contenu d'un File dans un tableau de byte
    Par JohnBlatt dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 25/08/2006, 14h18
  5. Réponses: 4
    Dernier message: 26/01/2006, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo