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 :

[Lecture dans un fichier]Donné non écrite dans une variable


Sujet :

C++

  1. #1
    Membre averti Avatar de yetimothee
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 260
    Points : 364
    Points
    364
    Par défaut [Lecture dans un fichier]Donné non écrite dans une variable
    Voici mon code :

    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
    void ouvrirFichier(char* nom_fichier, int& nbLignes, int& nbColonnes, char** Matrice)
    {
       ifstream fichier ; // Objet de type ifstream
       fichier.open(nom_fichier); //Ouverture en lecture seule
     
       if(fichier == 0) { //Teste de l'existence du fichier
          allegro_message("Erreur lors de l'ouverture de %s !", nom_fichier);
          exit(1);
       }
     
       //Lecture de la taille du niveau
       fichier >> nbColonnes;
       fichier >> nbLignes;
     
       //Allocation du tableau par niveau
       Matrice = new char*[nbColonnes];
       for(int i=0; i< nbColonnes; i++)
          Matrice[i] = new char[nbLignes];
     
       //Initialisation des valeurs du tableau
       for(int i=0; i< nbColonnes; i++)
          for(int j=0; j< nbLignes; j++)
             Matrice[i][j] = '0';
     
       // Lecture du tableau, caractère par caractère
       for(int j=0; j<nbLignes; j++)
          for(int i=0; i<nbColonnes; i++)
             fichier >> Matrice[i][j] ;
     
       fichier.close(); //Fermeture du fichier
    }
    Voilà le problème :
    Lorsque je demande à l'ordinateur quels sont les valeurs de nbColonnes et nbLignes, il me retourne 0

    Le fichier texte commance comme suit :
    C'est pas le problème...

    Je ne comprends, ça fais 4 jours que je patauge dessus, sans trouver l'erreure.
    Ce qui est curieux, c'est que même si je déclare une variable au sain même de la fonction, elle retourne 0...


    Des idées ? Merci !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Points : 275
    Points
    275
    Par défaut
    'Alut.

    Je viens de tester ton bout de code, et il marche au poil...

    Cherche ton erreur ailleurs...

  3. #3
    Membre averti Avatar de yetimothee
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    ok, merci
    Je vais voir ce qui peut bien faire que ces ****** de variables merdes...

    Peut-être que mes autres pages de code...

    fonction jeu, dans jeu.cpp
    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
    void jeu(BITMAP* buffer)
    {   
       //Declaration des variables
       BITMAP* background ;
       int x, y;
       long wSIZE, hSIZE;
     
       char** Matrice; //Matrice contenant le niveau
       int nbLignes, nbColonnes ;
     
       nbLignes = nbColonnes = 0;
     
       //Ouverture du niveau
       ouvrirFichier("data/lvl/m01.txt", nbLignes, nbColonnes, Matrice);
     
       allegro_message("%d, %d", nbLignes, nbColonnes);
     
       //Initialisation des variables
       background = load_bitmap("data/img/background.bmp", NULL);
       x = y = 0;
       wSIZE = nbColonnes * 42;
       hSIZE = nbLignes * 42 ;
     
     
       //On initialise le buffer
       buffer = create_bitmap(wSIZE, hSIZE);
     
       while(!key[KEY_ESC])
       {
             clear_bitmap(buffer); //On efface l'écran
             textout(buffer, font, "Scrolling avec les fleches", 10, 10, 0xFFFFFF);
             blit(buffer, screen, x, y, 0, 0, SCREEN_W, SCREEN_H);
       }
    }
    fichier.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef DEF_FICHIER
    #define DEF_FICHIER
     
    #include <fstream>
    #include <iostream>
     
    #include "jeu.h"
    #include "menu.h"
     
    using namespace std;
     
    void ouvrirFichier(char* nom_fichier, int& nbLignes, int& nbColonnes, char** Matrice); //Definition
     
    #endif
    Faites pas attention aux trucs du genre BITMAP* xxxxxxx, c'est de l'Allegro...

    Je ne comprends vraiment pas...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 108
    Points : 109
    Points
    109
    Par défaut
    Dans l'appel de ouvrir_fichier, rajoutes un '&' devant nbLignes et nbColonnes... (c'est peut être pas ça, je sais même pas pourquoi je le dis, mais on sait jamais ^^.
    Et pourquoi dans ouvrir_fichier tu enleve pas le passage par adresse et rajoutes un return...(qui renvoie un tableau de 2 cases, nbLignes et nbColonnes).

    Ca donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int[2] ouvrirFichier(char* nom_fichier, int nbLignes, int nbColonnes, char** Matrice);
    pour la déclaration,

    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
    int[2] ouvrirFichier(char* nom_fichier, int nbLignes, int nbColonnes, char** Matrice)
    {
       ifstream fichier ; // Objet de type ifstream
       fichier.open(nom_fichier); //Ouverture en lecture seule
     
       if(fichier == 0) { //Teste de l'existence du fichier
          allegro_message("Erreur lors de l'ouverture de %s !", nom_fichier);
          exit(1);
       }
     
       //Lecture de la taille du niveau
       fichier >> nbColonnes;
       fichier >> nbLignes;
     
       //Allocation du tableau par niveau
       Matrice = new char*[nbColonnes];
       for(int i=0; i< nbColonnes; i++)
          Matrice[i] = new char[nbLignes];
     
       //Initialisation des valeurs du tableau
       for(int i=0; i< nbColonnes; i++)
          for(int j=0; j< nbLignes; j++)
             Matrice[i][j] = '0';
     
       // Lecture du tableau, caractère par caractère
       for(int j=0; j<nbLignes; j++)
          for(int i=0; i<nbColonnes; i++)
             fichier >> Matrice[i][j] ;
     
       fichier.close(); //Fermeture du fichier
     
       nbLignesColonnes[0] = nbLignes;
       nbLignesColonnes[1] = nbColonnes;
     
       return nbLignesColonnes;
    }
    pour la définition et

    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
    void jeu(BITMAP* buffer)
    {   
       //Declaration des variables
       BITMAP* background ;
       int x, y;
       long wSIZE, hSIZE;
     
       char** Matrice; //Matrice contenant le niveau
       int nbLignes, nbColonnes ;
     
       nbLignes = nbColonnes = 0;
     
       //Ouverture du niveau
       int[2] nbLignesColonnes = ouvrirFichier("data/lvl/m01.txt", nbLignes, nbColonnes, Matrice);
     
       nbLignes = nbLignesColonnes[0];
       nbColonnes = nbLignesColonnes[1];
     
       allegro_message("%d, %d", nbLignes, nbColonnes);
     
       //Initialisation des variables
       background = load_bitmap("data/img/background.bmp", NULL);
       x = y = 0;
       wSIZE = nbColonnes * 42;
       hSIZE = nbLignes * 42 ;
     
     
       //On initialise le buffer
       buffer = create_bitmap(wSIZE, hSIZE);
     
       while(!key[KEY_ESC])
       {
             clear_bitmap(buffer); //On efface l'écran
             textout(buffer, font, "Scrolling avec les fleches", 10, 10, 0xFFFFFF);
             blit(buffer, screen, x, y, 0, 0, SCREEN_W, SCREEN_H);
       }
    }
    pour jeu.cpp.

    PS : je ne suis pas trop sur si on peut renvoyer un tableau... (int[2] fonction), ou tout du moins pas sûr pour l'orthographe (peut être int*, int[] où tout simplement int...).

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Bonjour,
    si tu veut recuperer le la matrice alloué dans tas fonction il faut que tu rajoute un &
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void ouvrirFichier(char* nom_fichier, int& nbLignes, int& nbColonnes, char** &Matrice)
    Un conseil gère ton buffer d'image par un tableau 1D et surtout, créé ou utilise une class encapsulant ton image. Tu aura moins de problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    unsigned char * buffer_image = new unsigned char [nbLignes* nbColonnes*nbComponent];
    //accés au pixel x,y
    buffer_image[(y*nbLignes+x)*nbComponent + c] ;
    avec par exemple :
    c =0 pour le rouge
    c = 1 pour le bleu
    c = 3 pour le vert

  6. #6
    Membre averti Avatar de yetimothee
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Nan nan, j'ai besoin que mes variables soit accessibles dans le reste du programme, et j'ai ma logique à moi, c'st comme ça que je veux procéder, et pas autrement...
    Mais merci quand même

  7. #7
    Membre averti Avatar de yetimothee
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Bon, et bien apperamment mon fichier étais corrompu ou autre...
    Merci d'avoir essayé de m'aider, la solution est souvent plu simple que ce que l'on penses....

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par yetimothee Voir le message
    Nan nan, j'ai besoin que mes variables soit accessibles dans le reste du programme, et j'ai ma logique à moi, c'st comme ça que je veux procéder, et pas autrement...
    Mais merci quand même
    No problème.
    Cela rejoint tes besoins mais pas ta logique

    mais attention à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void ouvrirFichier(char* nom_fichier, int& nbLignes, int& nbColonnes, char** &Matrice)
    sinon tu ne recuperera jamais ton tableau.

  9. #9
    Membre averti Avatar de yetimothee
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Ben, j'ai mis mes variables en globales, masi merci quand même, je ne savais pas comment faire pour les réferences de doubles pointeurs..0.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Stockage dans la Base de données VS Stockage dans un fichier
    Par hayaet dans le forum Optimisations
    Réponses: 3
    Dernier message: 25/11/2007, 21h39
  2. Réponses: 6
    Dernier message: 28/02/2007, 16h18
  3. Réponses: 2
    Dernier message: 29/01/2007, 14h14
  4. Réponses: 2
    Dernier message: 05/01/2006, 14h17

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