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 :

Mon programme ne m'affiche pas la totalité de mon fichier txt :)


Sujet :

C++

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Mon programme ne m'affiche pas la totalité de mon fichier txt :)
    Bonjour tout le monde,

    J'ai presque terminé mon exercice, le seul problème, est que je ne peux pas afficher le résultat à l'écran.

    Je dois donc lire les informations d'un fichier txt qui a ces informations :

    14 aiglefin N N O nom masculin poisson de mer
    14 aigrefin N N O nom masculin escroc
    24 amoral A O N adjectif qui ne fait pas de distinction entre le bien et le mal
    Le problème est qu'il n'y a que ça qui s'affiche :

    14
    14
    24
    24

    285
    Ma méthode d'affichage est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void CTabFauxFreres::Afficher()
    {
     
    		printf("\n\nListe des différente éléments du tableau :\n");
     
    		for(long n = 0; n < Nombre(); n++)
    		{
    			printf("%ld%s\n",Element(n).Code(),Element(n).Nom());
     
     
    		}
     
    }
    Il ne prend donc qu'un seul élément en compte.

    Je vous laisse l'entierté de mon code, sauriez-vous regarder ce qu'il se passe ?

    Je vous en remercie d'avance.

    beegees

  2. #2
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,

    une petite remarque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bool	CFauxFrere::Descriptif(const char* UnDescriptif)
    {
    	if ((Descriptif == NULL) || (strlen(UnDescriptif)<1)) return false;
    	return m_Descriptif.Chaine(UnDescriptif);
    }
    Mon compilateur me met une erreur ici,
    ce ne serait pas plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bool	CFauxFrere::Descriptif(const char* UnDescriptif)
    {
    	if ((UnDescriptif == NULL) || (strlen(UnDescriptif)<1)) return false;
    	return m_Descriptif.Chaine(UnDescriptif);
    }
    Sinon, pour ton problème, la raison est toute simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CFauxFrere::CFauxFrere(short UnCodeIdentification,const char* UnNom, const char* UnAttribut,const char* Feminin,const char* Pluriel,const char* Untype,const char* UneDefinition)
    {
    	Code(UnCodeIdentification);
    }
    Si tu veux afficher le nom,
    il faut que ton constructeur soit de cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CFauxFrere::CFauxFrere(short UnCodeIdentification,const char* UnNom, const char* UnAttribut,const char* Feminin,const char* Pluriel,const char* Untype,const char* UneDefinition)
    {
    	Code(UnCodeIdentification);
            Nom(UnNom);
    }
    J'ai regardé le code un peu autre part, dans la partie chaine.h et chaine.cpp, et même moi qui ne suis pas fanatique du C++ j'ai eu du mal à le digérer...

    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
    bool CChaineComposee::Decomposer(char UnSeparateur)
    {
    	m_NbrChamps = 0;
    	char* Texte = (char*)Chaine();
    	if (Texte == NULL) return false;
    	void* Nouveau = realloc(m_Champs,1*sizeof(char*));
    	if (Nouveau == NULL)
    	{
    		if (m_Champs)
    		{
    			free(m_Champs);
    			m_Champs = NULL;
    		}
    		return false;
    	}
    	m_Champs = (char**)Nouveau;
    	m_Champs[m_NbrChamps] = Texte;
    	m_NbrChamps++;
    	while (true)
    	{
    		char* Delimiteur = strchr(Texte,UnSeparateur);
    		if (Delimiteur == NULL) return true;
    		*Delimiteur = 0;
    		Texte = Delimiteur + 1;
    		void* Nouveau = realloc(m_Champs,(m_NbrChamps+1)*sizeof(char*));
    		if (Nouveau == NULL) return false;
    		m_Champs = (char**)Nouveau;
    		m_Champs[m_NbrChamps] = Texte;
    		m_NbrChamps++;
    	}
    }
    Au lieu de faire ces réallocs en cascade dans sa fonction décomposer, parcourir une fois au début la chaine en entier pour savoir exactement la taille du tableau et ne l'allouer qu'une fois (ce qui nous permet par la même occasion d'utiliser new), puis reparcourir la chaine, serait plus clair et plus performant.

  3. #3
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    En effet, il faudrait un peu plus utiliser les outils offerts par le C++.

    Je te conseille de te rendre sur la FAQ C++ et de rechercher iostream, new, delete, entre autres.

    iostream est l'en-tête permettant d'accéder aux flux standards par le biais de cin et cout principalement.

    new et delete sont les mots clés C++ permettant l'allocation et la destruction d'objets dynamiques en mémoire. Ils "remplacent" malloc, free & compagnie.

  4. #4
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut Coyotte,

    Ah je suis content, ça fonctionne.

    Là, j'avoue, s'était tout bête, j'ai encore appris quelque chose ce matin.

    Désolé pour ce code, je suis tributaire du prof, l'examen est dans un mois, dès que s'est fini, je me suis acheté un bon livre et je pourrai alors apprendre par moi-même.

    Je dois quand même préciser qu'il nous a enseigner les bases avant de nous proposer des classes génériques.

    une petite remarque:

    bool CFauxFrere:escriptif(const char* UnDescriptif)
    {
    if ((Descriptif == NULL) || (strlen(UnDescriptif)<1)) return false;
    return m_Descriptif.Chaine(UnDescriptif);
    }

    Mon compilateur me met une erreur ici,
    ce ne serait pas plutôt:

    Code :

    bool CFauxFrere:escriptif(const char* UnDescriptif)
    {
    if ((UnDescriptif == NULL) || (strlen(UnDescriptif)<1)) return false;
    return m_Descriptif.Chaine(UnDescriptif);
    }
    Il me semble que ces deux portions de codes sont identiques ?

    Chez moi, je n'ai pas de message d'erreur pour cette partie de code mais en effet, le test == NULL ne fonctionne pas.

    Edit : Dis, toi qui a pu analyser mon code, saurais-tu stp me dire à quoi sert "NombreDeClesDeTri" ? ça renvoie le nombre de clé de tri qu'on veut utiliser mais je ne comprends pas bien à quoi ça sert.

    Et Si je lui dis de gérer l'uncité, en mettant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool	CFauxFrere::GereUnicite() const
    {
    	return true;
    }
    il ne m'affiche qu'une seule ligne

    Edit : voici ce qui est dit à propos de GereUnicite et tri :
    si la classe doit permettre l'ajout d'objets de cette nature dans un tableau générique :

    * en assurant l'unicité par rapport à un membre servant de clé primaire, il faut réécrire la méthode bool GereUnicite() const afin qu'elle puisse retourner true et la méthode int Comparer(const CGenerique& Autre, long TypeComparaison) const afin d'implémenter la comparaison nécessaire à la recherche (TypeComparaison == 0)
    * en permettant le tri par rapport à un ou plusieurs membres servant de clé(s) de tri, il faut réécrire les méthodes long NombreClesDeTri() const afin qu'elle puisse retourner le nombre de clés de tri supportées et int Comparer(const CGenerique& Autre, long TypeComparaison) const afin d'implémenter la (ou les) comparaison(s) nécessaire(s) au(x) tri(s) ((TypeComparaison >= 1) et (TypeComparaison <= NombreClesDeTri))

    Encore un tout grand merci pour ton aide, vraiment, tu m'aides énormément.

    Bon Dimanche à toi.

    beegees

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Alp Voir le message
    En effet, il faudrait un peu plus utiliser les outils offerts par le C++.

    Je te conseille de te rendre sur la FAQ C++ et de rechercher iostream, new, delete, entre autres.

    iostream est l'en-tête permettant d'accéder aux flux standards par le biais de cin et cout principalement.

    new et delete sont les mots clés C++ permettant l'allocation et la destruction d'objets dynamiques en mémoire. Ils "remplacent" malloc, free & compagnie.
    Je le ferai dès que mes exams seront terminés, félicitation pour ce site hyper utile.

    beegees

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    Citation Envoyé par beegees Voir le message
    je me suis acheté un bon livre et je pourrai alors apprendre par moi-même.
    lequel?

  7. #7
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par nikko34 Voir le message
    lequel?
    Le programmeur : Le langage c++ (Nouvelle édition) par Jesse Liberty (campus press).

    Bon Dimanche.

    Beegees

  8. #8
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,

    dans le deuxième code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((UnDescriptif == NULL) || (strlen(UnDescriptif)<1))
    En fait si tu fais Descriptif == NULL, tu testes l'adresse de ta fonction membre Descriptif (qui ne sera jamais nulle), alors que si tu fais UnDescriptif == NULL, tu regarde si ce qui t'es passé en paramètre vaut NULL.

    Sinon, désolé, je n'ai pas analysé le code plus que ça, je suis passé par là pour essayer de trouver le problème, mais je t'avoue que je n'ai pas regardé le reste

    Passe aussi un bon dimanche

    Coyotte508

  9. #9
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par coyotte507 Voir le message
    Salut,

    dans le deuxième code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((UnDescriptif == NULL) || (strlen(UnDescriptif)<1))
    En fait si tu fais Descriptif == NULL, tu testes l'adresse de ta fonction membre Descriptif (qui ne sera jamais nulle), alors que si tu fais UnDescriptif == NULL, tu regarde si ce qui t'es passé en paramètre vaut NULL.

    Sinon, désolé, je n'ai pas analysé le code plus que ça, je suis passé par là pour essayer de trouver le problème, mais je t'avoue que je n'ai pas regardé le reste

    Passe aussi un bon dimanche

    Coyotte508
    Salut Coyotte,

    Un super grand merci pour ton aide.

    S'était tout bête comme problème le UnDescriptif

    Encore un tout grand merci et bon Dimanche (ensoleillé)

    beegees

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

Discussions similaires

  1. Mon programme ne s'affiche pas
    Par bugland dans le forum Langage
    Réponses: 3
    Dernier message: 11/01/2007, 13h19
  2. Réponses: 7
    Dernier message: 02/09/2005, 16h15
  3. [XSL]Comment faire ceci ?? Mon for-each n'affiche pas tout !
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 27/07/2005, 16h04
  4. Mon dessin ne s'affiche pas au lancement...
    Par Deedier dans le forum MFC
    Réponses: 6
    Dernier message: 02/05/2005, 17h29
  5. [JApplet]mon applet ne s'affiche pas.
    Par yannick56 dans le forum Applets
    Réponses: 6
    Dernier message: 27/05/2004, 18h05

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