Bonjour à tous,
je suis débutant et j'ai un petit problème lors de l'écriture d'informations dans un fichier binaire.
J'ai une classe "Perso" qui permet d'afficher et de remplir les variables d'un personnage:
Ensuite j'ai une classe fichier qui créer, ouvre, écrit et lit mon fichier, normalement il devrait écrire les valeurs de la classe Perso dans le fichier mais ce n'est pas la cas
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 void Perso::AfficherPerso(Perso& aPerso) { cout<<"Nom: "<<aPerso.pnom<<endl; cout<<"Experience: "<<aPerso.exp<<endl; cout<<"ID: "<<aPerso.id<<endl; cout<<"Sante: "<<aPerso.sante<<endl; cout<<"Classe: "<<aPerso.classe<<endl; cout<<"Force: "<<aPerso.force<<endl; cout<<"Agilite: "<<aPerso.agilite<<endl; cout<<"Intelligence: "<<aPerso.intell<<endl; } void Perso::DemanderPerso(Perso& aPerso) { cout<<"Creation"<<endl<<endl; cout<<"Nom:"; cin.ignore(); //vide le choix du menu, vide le buffer cin.getline(aPerso.pnom,MAXLEN_NOM+1); cout<<"Entrez force: "; cin>>aPerso.force; cout<<"Entrez agilite: "; cin>>aPerso.agilite; cout<<"Entrez Intelligence: "; cin>>aPerso.intell; }:
Mon main de test avec:
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 void Fichier::OuvrirEcriture() { ofstream fichier ("test.dat", ios::binary); if(!fichier) { cout<<"Erreur a l'ouverture!"<<endl; } } void Fichier::OuvrirLecture() { ifstream fichier ("test.dat", ios::in|ios::binary); if(!fichier) { cout<<"Erreur a l'ouverture!"<<endl; } } Fichier& operator<<(Fichier& as, Perso& aPerso) { as.seekp(0,ios_base::end); //debut fichier as.write(aPerso.pnom, Perso::MAXLEN_NOM); as.write((char *)&(aPerso.exp), sizeof(float)); as.write((char *)&(aPerso.id), sizeof(float)); as.write((char *)&(aPerso.sante), sizeof(float)); as.write((char *)&(aPerso.classe), sizeof(float)); as.write((char *)&(aPerso.force), sizeof(float)); as.write((char *)&(aPerso.agilite), sizeof(float)); as.write((char *)&(aPerso.intell), sizeof(float)); return(as); } Fichier& operator>>(Fichier& as, Perso& aPerso) { as.read (aPerso.pnom, Perso::MAXLEN_NOM); aPerso.pnom[Perso::MAXLEN_NOM]=0; as.read((char *)&(aPerso.exp), sizeof(float)); as.read((char *)&(aPerso.id), sizeof(float)); as.read((char *)&(aPerso.sante), sizeof(float)); as.read((char *)&(aPerso.classe), sizeof(float)); as.read((char *)&(aPerso.force), sizeof(float)); as.read((char *)&(aPerso.agilite), sizeof(float)); as.read((char *)&(aPerso.intell), sizeof(float)); return(as); }
- case'1' qui permet d'entrer un joueur et de d'écrire
- case'2' qui permet de relire le fichier et d'afficher ce qui est lu:
Mon fichier est bien crée mais il reste vide lors du passage dans case '1'.
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 void main () { char cRep; Perso testperso; Menu menutest; Fichier file; do { cRep = menutest.DisplayPrincipal(); switch(cRep) { case '1': file.OuvrirEcriture(); testperso.DemanderPerso(testperso); file << testperso; file.flush(); file.close(); break; case '2': file.OuvrirLecture(); file.seekp(0,ios_base::beg); file >> testperso; testperso.AfficherPerso(testperso); file.close(); system("pause"); break; } }while(cRep!='Q');
Je soupçonne un problème avec mes operators << et >>.
Merci d'avance pour votre aide.
Partager