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 :

probleme fichier lecture


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut probleme fichier lecture
    bonjour

    tout d'abord voici le 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
    32
    33
    34
    35
    36
    ifstream ifs(filename);
        int ligne = 0;
        while(!ifs.eof())
        {
            char c = ifs.get();
            if(c == '\n')
            {
                ligne++;
            }
        }
        //cout << "ligne " << ligne << endl;
     
        srand(time(NULL));
        int lignechoisi  = 0;
        while(lignechoisi == 0)
        {
            lignechoisi = rand() % ligne;
        }
        cout << "ligne choisi " << lignechoisi << endl;
     
        ifs.seekg(0, ios::beg);
        int pos = ifs.tellg();
        cout << "position " << pos << endl;
        //lignechoisi--;
        while(lignechoisi > 0)
        {
            //cout << "entrer 2eme boucle" << endl;
            char c = ifs.get();
            cout << c << endl;
            if(c == '\n')
            {
                cout << c << " trouver" << endl;
                lignechoisi--;
                cout << "ligne " << lignechoisi << endl;
            }
        }
    alors voila tout marche jusqu'a la deuxieme boucle ou il doit se placer a la ligne choisi il ne lis pas de caratere donc boucle infinie.

    donc la question est pourquoi il fait cela ?

    ps : je suis presque sur de mon code car deja utiliser une fois pour un jeu de mot mystere qui fonctionne encore

  2. #2
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    plutôt qu'entrer tes caractères les un après les autres utilise un "getline"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            std::string name;
            int line(0);
            while( std::getline(ifs,name))
                    ligne++;
    Tu parles de deuxième boucle, la ligne 15 ?

  3. #3
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Pour le getline a voir.

    non 3ème boucle ligne 25 désolé

  4. #4
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Pour le getline c'est mile fois(au moins) plus facile !
    (Je ne te vois à aucun moment où tu stockes un nom, un char stocke UNE lettre. Utilise les strings !! (tu peux jouer avec les mots sans te préoccuper de savoir comment sont gérées chaque lettre )
    Un exemple pour te rendre compte de l’efficacité du getline et string :
    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
    #include <vector>
    #include <string>
    #include <iostream>
    #include <fstream>
    #include  <stdlib.h>
    using namespace std;
     
    int main(void) {
     
            vector < string > dico;
            ifstream ifs( "Dico.txt" );
            string nom;
     
            while( getline( ifs, nom ))//Tant qu'il y a des lignes
                    dico.push_back( nom );//Stocke les strings dans un vecteur
     
            cout << "Taille du dico :" << dico.size() << endl;
     
            srand( time( NULL ));
            int lignechoisi = rand() % dico.size() + 1;
     
            cout << "Ligne choisi :" << lignechoisi << endl;
     
            cout << "Mot choisi : " << dico[ lignechoisi - 1 ] << endl;
     
            return 0;
    }

  5. #5
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Ouais mais dans mon cas je sais pas si cela servirait car je veux compter le nombre de ligne puis générer un nombre aléatoire de ces lignes qui sera la ligne choisi pour enfin parcourir jusqu’à se placer à la ligne.

  6. #6
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    je veut compter le nombre de ligne puis generer un nombre aleatoire de ces lignes qui sera la ligne choisi pour enfin parcourir jusqu'a se placer a la ligne
    , et recuperer le mot ?! Le code que je t'ai donné fait tout cela :

    Nombre de lignesChoix aléatoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    srand( time( NULL ));
            int lignechoisi = rand() % dico.size() + 1;
    Récupération du mot à "lignechoisi"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dico[ lignechoisi - 1 ]

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

Discussions similaires

  1. Gros probleme de lecture d'un fichier texte
    Par Draekonyss dans le forum C
    Réponses: 12
    Dernier message: 25/04/2006, 09h25
  2. Probleme de lecture fichier
    Par calimero642 dans le forum Langage
    Réponses: 4
    Dernier message: 28/03/2006, 10h38
  3. Probleme de lecture de fichier
    Par ArkAng3 dans le forum MFC
    Réponses: 9
    Dernier message: 11/12/2005, 20h47
  4. Probleme de lecture d'un fichier XML
    Par chleuh dans le forum Langage
    Réponses: 8
    Dernier message: 30/08/2005, 12h04
  5. [vb.net][xml] probleme de lecture de fichier
    Par graphicsxp dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/07/2005, 11h51

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