begin process at 2012 05 30 01:39:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine

dimanche 2 mai 2010 à 20:58:00 | Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine

curite

Bonjours, j'ai créer un gestionnaire de mot de passe en c++ je vous montre le code sinon vous allez rien comprendre :p

main.cpp
Code C/C++ :
#include <iostream>
#include <string>

using namespace std;

string ajoutCompte(const string& compte,const string& login,const string& mdp);//les prototypes
int afficherCompte1(int numeroCompte);
int afficherCompteTout(int lala);

int main()
{
int medp=NULL;
     int choixMenu;
     int choixCompte;
	 int variablePourParametre;

     string compte;
     string login;
     string mdp;
     do
{

     cout<<"Que voulez-vous faire?: "<<endl<<endl<<"1-Voir les mots de passe"<<endl;//on affiche les choix
     cout<<"2-Ajouter un compte"<<endl<<"3-Supprimer TOUT les mots de passe";
     cout<<endl<<"4-Quitter"<<endl;
     cin>>choixMenu;
     switch (choixMenu)//le traditionnel switch
     {
         case 1:
         cout<<"-----MOTS DE PASSE ENREGISTRES-----";
         cout<<endl<<endl<<"Voici la liste des mots de passes enregistres: "<<endl<<endl;
         afficherCompteTout(variablePourParametre);//vous remarquerez , variablePourParametre ne sert a rien, mais sans sa, code block me renvoi une erreur

         cout<<endl<<endl<<"Quel mot de passe voulez vous afficher?(un nombre trop grand affichera\nle dernier): ";
         cin>>choixCompte;
        afficherCompte1(choixFonction);//pour afficher le compte choisi

         break;

         case 2:
         cout<<"-----AJOUT D'UN MOT DE PASSE-----"<<endl<<endl;
         cout<<"Donnez un nom au compte pour le reconnaitre: "<<endl;
         cin>>compte;
         cout<<"Entrez le login: "<<endl;
         cin>>login;
         cout<<"Entrez le mot de passe: "<<endl;
         cin>>mdp;
         ajoutCompte(compte,login,mdp);//pour ajouter un compte
         break;


         case 3:
         remove("dnnsmps.gmtp");//pour supprimer le fichier donc les mdp
         break;

         case 4:
         return 0;//pour fermer la console
         break;

         default:
         cout<<"Valeur rentree non correspondante";//si la personne a entrée un mauvais numéro
     }


     cout<<"Que voulez vous faire?"<<endl<<endl<<"1-Retourner au menu"<<endl<<"2-Quitter";//pour pouvoir retourner au menu
     cin >> choixMenu;
}while(choixMenu != 2);//si il veut quitter, la fonction se termine par un return et la console de ferme
        return 0;
}


fonction.cpp
Code C/C++ :
#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>

using namespace std;


void ajoutCompte(const string& compte,const string& login,const string& mdp)//pour ajouter un compte
{
        fstream fichier("dnnsmps.gmtp", ios::out|ios::app);//je met souvent fstream car je trouve sa plus simple
        if(fichier)
        {
               fichier << compte << std::endl;//pour ecrire dans le fichier
               fichier << login << std::endl;
               fichier << mdp << std::endl;

                fichier.close();
        }
        else//sinon erreur
        {
                cerr << "Impossible d'ouvrir le fichier !" << endl;
        }
}

void afficherCompte1(int numeroCompte)//pour afficher un compte
{
fstream fichier("dnnsmps.gmtp", ios::in);  // on ouvre le fichier en lecture

        if(fichier)  // si l'ouverture a réussi
        {
            int i= NULL;
            string compte;
            string login;
            string mdp;
            do
            {
                getline(fichier, compte);//récupération du compte
                getline(fichier, login);
                getline(fichier, mdp);
                i++;//incrémantation pour compter
            }while(i != numeroCompte);//tant que le numero du compte voulu est différent de celui ou on est
            cout<<compte<<":"<<endl<<"Login: "<< login <<endl<<"Mot de passe: "<< mdp << endl;
                fichier.close();  // on ferme le fichier
        }
        else  // sinon
             {
                  cerr << "Impossible d'ouvrir le fichier !" << endl;
             }
}

void afficherCompteTout(int trucQuiSertARien)//le paramètre ne sert a rien (je n'arrive pas a faire sans)
    fstream fichier("dnnsmps.gmtp", ios::in);  // on ouvre le fichier en lecture

        if(fichier)  // si l'ouverture a réussi
        {
            string compte;
            string login;
            string mdp;
            int numeroCompte=1;
            do
            {
                getline(fichier, compte);//on récupère
                getline(fichier, login);
                getline(fichier, mdp);

                cout << numeroCompte<<"-"<<compte<<endl;//on affiche
                numeroCompte++;//incrémentation pour la numerotation

            }while(getline(fichier, compte));//tant que je peut stocker une ligne dans compte


                fichier.close();  // on ferme le fichier

        }
        else  // sinon
                {
                    cerr << "Il faut ajouter des mots de passe avant de regarder si il y en a!!" << endl;//comme le fichier existe pas, il n'y as pas de mots de passe

                }

}


Mon problème:
Quand j'ai ajouter un 4ièm,8ièm,12ièm...ect(4 par 4) mot de passe, quand je fait"voir les mot de passe" sa me met:

Le resultat de la console:


-----Mots de passes enregistrer-----

Voici la liste des mots de passe enregistres:

1-machin
2-bidule
3-lala
4- //sa ne m'affiche pas nom de compte il est sensé s'afficher le 4ième compte enregistrer



Bon voila, j'ai fait un exposer introductif de mon problème
Pourriez vous m'indiquer une solution :o , si vous en connaisez une o_O
lundi 3 mai 2010 à 10:23:33 | Re : Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine

buno

Administrateur CodeS-SourceS
Hello,
Dans la fonction AfficherCompteTout(), tu lis 4 lignes mais tu n'en affiches que 3. En effet, la ligne que tu lis dans l'instruction while est perdue...
Entre nous, si ton paramètre ne sert à rien, tu peux le supprimer dans le prototype et dans l'appel de la fonction, non?


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
lundi 3 mai 2010 à 13:22:05 | Re : Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine

curite

C'est vrai je n'y avait pas pensé, merci. Mais je voulait savoir: dans l'arguent de while, ca compte vraiment pour une ligne lue, et sa change de ligne comme un "getline"? Si c'est sa, a mon avis il faudrait que je créer un fichier comprenant le nombre de mots de passe et dans la boucle je met une variable avec incremantation jusqu'à que sa affiche tout les compte. Corrigez moi si je me trompe.
lundi 3 mai 2010 à 14:17:20 | Re : Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine

buno

Administrateur CodeS-SourceS
Ah bah vi! Ce n'est pas parce que c'est un argument à la condition while que ton getline ne lira pas une ligne
Inutile d'avoir un autre fichier pour avoir ta condition de fin.
Je te propose la façon suivante:
- dans ton fichier, tu crée une seule ligne par compte, une ligne comprenant donc un compte, un login, un mot de passe
- dans ton code, tu code un truc comme ceci:
Code C# :
while (getline(fichier,ligne)
{
  // récupération des différents champs

  // affichage
}



@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
lundi 3 mai 2010 à 16:54:16 | Re : Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine

curite

Ce n'est pas une mauvaise idée, mais c'est plus difficile que de stocker le nombre de compte dans un autre fichier. Merci pour l'idée je vais surement faire sa.
lundi 3 mai 2010 à 17:15:52 | Re : Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine

buno

Administrateur CodeS-SourceS

mais c'est plus difficile que de stocker le nombre de compte dans un autre fichier


Non, je ne pense pas. Ce sera, de plus, plus facile à maintenir plutôt que 2 fichiers séparés.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
mardi 4 mai 2010 à 07:49:44 | Re : Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine

curite

Je vais essayer les deux et je verrai quelle méthode est la plus rapide. En tout cas, merci pour cette très rapide.


Cette discussion est classée dans : fichier, int, string, login, compte


Répondre à ce message

Sujets en rapport avec ce message

besoin d'aide plzzz [ par Avalon10101 ] _-=AvAloN=-_Voici mon code : (en gros)#include class Compte{string login;string pass;public:Compte();void chercher();Compte ListdesComptes[100];}....v Probleme ASCII et coonversion string vers char (enfin je pense) [ par Leptis ] Salut a tous les pgm qu'il y a sur ce site. Avant tout je tien à vous prévenir que je suis en gros newbie en C.Voila mon problème : je cherche à faire fichier [ par infodaoudi ] je veux afficher la classes suivante dans un fichier binaire: class Noeud { public: int nbEntree; PageRegion *fils[C+1]; } avec: class PageRegion ouvrire polusieurs fichiers [ par Stiko ] bonjour; je veux ouvrire plusieurs fichiers "toto1.txt","toto2.txt".."toto10.txt"pourcela j ai fait un tableau de string tab1[];et j ai essayé de met Lire des chiffres avec les virgules [ par Stiko ] salut, j'ai fait un petit programme pour ouvrire un fichier texte qui contient seument des chifres séparées par des points virgules.ce programme lit l Conversion String en Float [ par mriviere ] Bonjour je cherche a convertir un char en float, je sais que la fonction atoi le fait mais elle ne prend pas en compte la virgule.En fait dans mon str deplacer fichier [ par kirby94460 ] voila mon problemelorsque je tape ce code :#include int main(int argc, char *argv[]){ MoveFile("C:\\Documents and Settings\\Vincent\\Bureau\\prog\\94. probleme dans une ecriture de fichier [ par hisoka56 ] bon salut a tous, j'ai un petit probleme d'ecriture dans un fichier dans uen fonction qui permet de sauvegarder un niveau voila le fichier de niveaux Templace c++ ==> URGENT svp [ par najla1986 ] bonjour, j'ai un dossier a rendre pour mes cours et j'ai un soucis concernant l'utilisation de mes template. c'est donc a l'appel des methode du templ Erreur conversion from `Sportif*' to non-scalar type `Sportif' requested [ par lordskyser1 ] Bonjour,je débute en C++ et je tente de compiler ma première classe sans y arriver, car je n'arrive pas à comprendre le message d'erreur de dev c++.he


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales