Problème de récupération des données

Fermé
Kellendrhos Messages postés 1 Date d'inscription samedi 13 décembre 2014 Statut Membre Dernière intervention 13 décembre 2014 - Modifié par Kellendrhos le 13/12/2014 à 12:08
Bonjour à tous,

Avec un ami nous tentons de créer un petit jeu avec sauvegarde mais nous avons un problème sur le sous-programme sensé charger les sauvegardes. Les sauvegardes sont des fichiers créés par le programme lors de sa première ouverture et "recréés" lors d'une modification. Le problèmes est qu'une fois qu'il est créé, quand on ouvre le programme il est sensé les relire pour récupérer les données mais il ne le fait pas. nous avons tenté plusieurs solutions, je vous mets les seules qui compilent mais elles ne marchent pas... Quelqu'un peut-il nous aider ? (Pour l'instant nous testons avec un seul personnage sauvegardé)
(le fichier de sauvegarde que l'on cherche à charger contient:
Kellendrhos
1
rien
Tenue Simple
rien
rien
Pantalon Simple
Chaussures Simples
Branche de bois
rien


Le premier :

void recuperation_donnees(int & nb_perso){
    t_position position;
    int idxnum;
    char asciinbpers;

    ifstream nbperson("data/nb_perso.txt",ios::in);
    nbperson>>asciinbpers;
    nbperson.close();
    nb_perso=asciinbpers-48;
    for(idxnum=0;idxnum<nb_perso;idxnum++){
        posfichier(position, idxnum+1);
        ifstream sauvegarde (position,ios::in);
        if (sauvegarde.bad())
            cout<<"problème d'ouverture"<<endl<<endl;
        else{
                while(!sauvegarde.eof()){
                    sauvegarde>>registre_perso[idxnum].nom;
                    sauvegarde>>registre_perso[idxnum].niveau;
                    sauvegarde>>registre_perso[idxnum].casque;
                    sauvegarde>>registre_perso[idxnum].armure;
                    sauvegarde>>registre_perso[idxnum].bras;
                    sauvegarde>>registre_perso[idxnum].mains;
                    sauvegarde>>registre_perso[idxnum].jambes;
                    sauvegarde>>registre_perso[idxnum].pieds;
                    sauvegarde>>registre_perso[idxnum].arme1;
                    sauvegarde>>registre_perso[idxnum].arme2;
                }
                sauvegarde.close();
        }
    }
}



et le second :

void recuperation_donnees(int & nb_perso){
    t_position position;
    int idxnum;
    char asciinbpers;
    t_niveau niv;

    ifstream nbperson("data/nb_perso.txt",ios::in);
    nbperson>>asciinbpers;
    nbperson.close();
    nb_perso=asciinbpers-48;
    for(idxnum=0;idxnum<nb_perso;idxnum++){
        posfichier(position, idxnum+1);
        ifstream sauvegarde (position,ios::in);
        if (sauvegarde.bad())
            cout<<"problème d'ouverture"<<endl<<endl;
        else{
                while(!sauvegarde.eof()){
                    sauvegarde.getline(registre_perso[idxnum].nom,30);
                    sauvegarde.getline(niv,4);
                    registre_perso[idxnum].niveau=(niv[0]-48)*100+(niv[1]-48)*10+(niv[2]-48);
                    sauvegarde.getline(registre_perso[idxnum].casque,30);
                    sauvegarde.getline(registre_perso[idxnum].armure,30);
                    sauvegarde.getline(registre_perso[idxnum].bras,30);
                    sauvegarde.getline(registre_perso[idxnum].mains,30);
                    sauvegarde.getline(registre_perso[idxnum].jambes,30);
                    sauvegarde.getline(registre_perso[idxnum].pieds,30);
                    sauvegarde.getline(registre_perso[idxnum].arme1,30);
                    sauvegarde.getline(registre_perso[idxnum].arme2,30);
                }
                sauvegarde.close();
        }
    }
}


Pour petite information : registre_perso est in tableau d'enregistrement donc les champs sont :
dans le 1, tous des chaines de caractères de taille 30,
dans le 2, il n'y a que le champ 'niveau' qui devient un entier.

Ce code semble basique et il l'est, on est encore dans les études... Alors merci pour votre aide !

Cordialement
Kellendrhos