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 :

Lire un plateau à partir d'un fichier et l'afficher


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Ingénieur Développement
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Développement

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Points : 58
    Points
    58
    Par défaut Lire un plateau à partir d'un fichier et l'afficher
    Bonjour je suis entrain de réaliser un jeu de plateau,
    le plateau qui est rectangulaire est stocké dans un fichier qui contient deux entiers designant les nombre de lignes et de colonnes. puis sous forme de matrice, il y a des entiers qui une fois transformés en binaire indique la nature des pions qui s'y trouvent.
    voilà un exemple de fichier
    6 6
    21 21 21 21 21 21
    21 2 2 2 2 21
    5 2 0 0 2 5
    5 2 0 0 2 5
    29 2 2 2 2 29
    29 29 29 29 29 29
    J'ai un problème pour lire le plateau à partir du fichier pour ensuite l'afficher. Je crois que le problème vient plutot de l'opérateur de lecture.

    la structure de données est dans une classe Plateau comme ceci
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    #include <fstream>
     
    #include <vector>
     
    #include <iostream>
     
    #include "Coup.h"
     
     
     
     
     
    using namespace std;
     
     
     
    class Plateau {
     
     
     
    private:
     
    //plateau représenté par un vecteur de vecteurs
     
    vector<vector<int> > v;
     
     
     
    typedef pair<int,int> Position;
     
     
     
    //liste des positions
     
    typedef vector<Position> Listepositions;
     
     
     
    //liste des coups
     
    typedef vector<Coup> Listedescoups;
     
     
     
     
     
    // dimensions
     
    int nblignes, nbcolonnes;
     
     
     
    public:
     
     
     
    // constructeurs
     
    Plateau() {}
     
    Plateau(int a,int b, vector<vector<int> > vect) {
     
    	nblignes = a;
     
    	nbcolonnes = b;
     
    	v = vect;
     
    }
     
     
     
    //selecteurs et accesseurs
     
     
     
    void setnblignes(int val) {
     
        nblignes = val;
     
      }
     
    void setnbcolonnes(int val) {
     
        nbcolonnes = val;
     
      }
     
    int getnblignes() const {
     
        return nblignes;
     
      }
     
    int getnbcolonnes() const {
     
        return nbcolonnes;
     
      }
    void setmatrice(vector<vector<int> > matrice){
    	v = matrice;
    	}
    vector<vector<int> > getmatrice() const {
    	return v;
    	}
     
     
     
    //opérateurs
     
    friend ostream& operator << (ostream& o, const Plateau& p);
     
    friend istream& operator >> (istream& i, Plateau& p);
    voilà le codage des opérateurs "ostream" et "istream"
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    //afficher le plateau
     
    ostream& operator << (std::ostream& o, const Plateau& p) {
     
    	vector<vector<int> > v = p.getmatrice();
     
    	vector<vector<int> >::const_iterator it1;
     
    	vector<int>::const_iterator it2;
     
    	int m = p.getnblignes();
     
    	int n = p.getnbcolonnes();
     
    	o << m << ' ' << n << endl;
     
    	it1 = p.v.begin();
     
    	while (it1!=p.v.end()) {
     
    		it2 = (*it1).begin();
     
    		while (it2!=(*it1).end()) {
     
    			o << *it2;
     
    			++it2;
     
    		}
     
    		o << endl;
     
    		++it1;
     
    	}
     
    }
     
     
     
     
     
    // lire le plateau a partir d'un fichier 
     
     
     
    istream& operator >> (std::istream& i, Plateau& p) {
     
    	int lignes, colonnes; vector<vector<int> > mat;
     
    	int valcourante;
     
    	i>>lignes;
     
    	p.setnblignes(lignes);
     
    	i>>colonnes;
     
    	p.setnbcolonnes(colonnes);
    	int n = lignes;
    	int m = colonnes;
     
    	mat.resize(n*m);
     
    	for (int i=0; i<n; ++i) {
     
    		//p.v[i].resize(colonnes);
     
    		for (int j=0; j<m; ++j) {
     
    			i>>valcourante;
     
    			mat[i][j] = valcourante;
     
    		}
     
    	}
    	p.setmatrice(mat);
     
    }
    J'ai essayé plusieurs fois mais je n'arrive pas à l'afficher .

    voiçi l'erreur qu'il me donne
    *** glibc detected *** free(): invalid next size (fast): 0x08062350 ***
    Abort
    est ce que vous avez une idée pour me sortir de là
    merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Hello zakalova,

    Il y a beaucoup de problèmes dans ton code:

    • Tu fais des tas de copies de vecteurs de vecteurs dans tous les sens. Ce n'est probablement pas ce que tu veux faire.
    • Tu as un "i >> valcourante" qui n'a aucun effet
    • Tu ne mélanges pas des bibliothèques debug avec des bibliothèques non-debug?


    Carl

  3. #3
    Membre du Club
    Profil pro
    Ingénieur Développement
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Développement

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Points : 58
    Points
    58
    Par défaut
    salut
    bon j'avoue!!! il faut dire que je code comme un animal
    bon avec un peu d'acharnement j'ai réussi à le lire le fichier
    après pour l'affichage j'ai rien eu à changer
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    //afficher le plateau
     
    ostream& operator << (std::ostream& o, const Plateau& p) {
     
    	vector<vector<int> > v = p.getmatrice();
     
    	vector<vector<int> >::const_iterator it1;
     
    	vector<int>::const_iterator it2;
     
    	int m = p.getnblignes();
     
    	int n = p.getnbcolonnes();
     
    	o << m << ' ' << n << endl;
     
    	it1 = p.v.begin();
     
    	while (it1!=p.v.end()) {
     
    		it2 = (*it1).begin();
     
    		while (it2!=(*it1).end()) {
     
    		  o << *it2 << " ";
     
    			++it2;
     
    		}
     
    		o << endl;
     
    		++it1;
     
    	}
     
    }
     
     
     
     
     
    // lire le plateau a partir d'un fichier 
     
     
     
    istream& operator >> (std::istream& in, Plateau& p) {
     
    	int lignes, colonnes; vector<vector<int> > vect;
     
    	int valcourante;
     
    	in>>lignes;
     
    	p.setnblignes(lignes);
     
    	in>>colonnes;
     
    	p.setnbcolonnes(colonnes);
     
    	vect.resize(p.getnblignes());
     
    	for (int i=0; i<p.getnblignes(); ++i) {
     
    		vect[i].resize(p.getnbcolonnes());
     
    		for (int j=0; j<p.getnbcolonnes(); ++j) {
     
    			in>>valcourante;
     
    			vect[i][j] = valcourante;
     
    			  //cout << valcourante << endl;
    		}
     
    	}
    	p.setmatrice(vect);
     
    }
    merci quand meme
    à+
    cordialement

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

Discussions similaires

  1. Lire une requete à partir d'un fichier .sql
    Par forsay1 dans le forum Développement de jobs
    Réponses: 9
    Dernier message: 15/11/2023, 15h40
  2. Lire du texte à partir d'un fichier
    Par naruto523 dans le forum C
    Réponses: 6
    Dernier message: 03/06/2013, 07h57
  3. lire des données à partir d'un fichier texte
    Par Flaherty Mc Coillean dans le forum C
    Réponses: 8
    Dernier message: 15/04/2009, 14h03
  4. Comment Lire une valeur à partir d'un fichier XML en C++?
    Par Hamdi Hedhili dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 13/12/2005, 10h09
  5. lire un champ de bit a partir d'un fichier
    Par loupdeau dans le forum MFC
    Réponses: 5
    Dernier message: 09/08/2005, 12h53

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