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 sait pas lire une ligne de texte :)


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 sait pas lire une ligne de texte :)
    Bonjour tout le monde,

    J'ai terminé mon exercice à 90% mais malheureusement ça ne fonctionne pas.

    Je me suis basé sur l'exerice du prof.

    Cet exercice doit simplement lire dans un fichier txt une ligne et ensuite ajouter la ligne d'un un tableau et l'afficher à l'écran.

    Voici l'énoncé :

    L'application devra gérer par classe UN tableau dynamique PAR TYPE de véhicules :
    - un véhicule peut être une voiture, un camion ou un bus
    - un véhicule est défini par :
    - une immatriculation
    - un nombre de places (places assises pour des personnes)
    - une voiture est caractérisée en plus par :
    - un volume transportable de marchandises
    - un camion est caractérisé en plus par :
    - un volume transportable de marchandises
    - un poids transportable de marchandises
    - un bus est caractérisé en plus par :
    - un nombre de rangs de sièges passager

    Le programme devra permettre à l'utilisateur :
    - dans un premier temps, d'encoder des véhicules dans l'un et l'autre
    tableaux (en fonction du type)
    - ensuite, de trier les 3 tableaux par ordre croissant d'immatriculation
    - et enfin, d'afficher sous forme d'un seul tableau visuel les véhicules
    en maintenant l'ordre croissant d'immatriculation (technique de la
    fusion de tableaux triés, sauf que l'on ne crée pas le tableau final
    en mémoire mais uniquement à l'affichage)
    Voici le fichier contenant les données :

    [EDIT]

    V ABBA54 50 25
    C CPP40M 2 3000
    V HUB345 5 200
    et voici ce que j'obtiens :

    Voitures :

    - Immatriculation :
    (null) - nombre de place : -1308
    VTM : 0
    Il ne trouve donc pas d'immatriculation, de nombre de place...

    Je sais que cette question n'est pas un cas bien précis de problème mais sauriez-vous svp regarder mon code au cas où quelque chose vous "choquerais" ?

    ça m'aiderais vraiment beaucoup

    Merci d'avance.

    beegees

    [Edit] avec le code s'est mieux

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par beegees Voir le message
    Je sais que cette question n'est pas un cas bien précis de problème mais sauriez-vous svp regarder mon code au cas où quelque chose vous "choquerais" ?
    Sans que tu n'aies publié ton code, non, on va avoir du mal à le regarder... Par contre, ne publies que le petit bout de code qui fait la lecture du fichier.

  3. #3
    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 JolyLoic Voir le message
    Sans que tu n'aies publié ton code, non, on va avoir du mal à le regarder... Par contre, ne publies que le petit bout de code qui fait la lecture du fichier.
    Excuse-moi Loic, nos messages se sont croisés.

    J'ai ajouté le code en TXT car trop de code autrement.

    Voici le code demandé :

    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
    bool CChargeurFichierTexte::Charger(const char* NomFichier, char UnSeparateur, bool (* FctnTraiterLigne)(const CChargeurFichierTexte&, void*), void* Contexte)
    {
    	const long		TailleLigne = 500;
    	char			Ligne[TailleLigne+1];
    	FILE*			Fichier;
     
    	if ( (NomFichier == NULL) || (*NomFichier == 0) ) return false;
    	Fichier = fopen(NomFichier,"rt");
    	while (fgets(Ligne,TailleLigne,Fichier) != NULL)
    	{
    		long i = strlen(Ligne);
    		if ( (i > 0) && (Ligne[i-1] == '\n') ) Ligne[i-1] = 0;
    		if (Definir(Ligne,'\t'))
    		{
    			if (!FctnTraiterLigne(*this,Contexte))
    			{
    				fclose(Fichier);
    				return false;
    			}
    		}
    	}
    	fclose(Fichier);
    	return true;
    }
    [Edit]

    1ère chose que je m'aperçois, s'est que le modèle envoyé à la fonction ajouter ne contient pas la chaîne de caractère (immatriculation)

    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
    bool CTabVoitures::Ajouter(const CVoiture& Modele)
    {
    	if (!Modele.EstValide()) return false;
    	//if (Indice(Modele.Nom()) >= 0) return true;
    	CVoiture* AAjouter = new CVoiture(Modele); //constructeur par copie
    	if (AAjouter == NULL) return false;
    	void* Nouveau = realloc(m_Tableau,(m_Nombre+1)*sizeof(CVoiture*));
    	if (Nouveau == NULL)
    	{
    		delete AAjouter;
    		return false;
    	}
    	m_Tableau = (CVoiture**)Nouveau;
    	m_Tableau[m_Nombre] = AAjouter;
    	m_Nombre++;
    	return true;
    }
    2e chose : les informations arrivent ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (CC.NombreChamps() == 4) m_TV.Ajouter(CVoiture(CC.Champs(1),atol(CC.Champs(2)),atol(CC.Champs(3)))); //ce qui est dans le fichier txt est du texte, il faut donc utiliser atol pour transformer du text en long
    S'est quand il arrive à l'information suivante que le modèle n'est pas envoyé (les caractéristiques du véhicule).

    Voir jpeg nommé switch.

    3e chose :

    Je me demande si le problème ne viendrait pas du constructeur spécifique que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CVoiture::CVoiture(const char* UneImmatriculation,short
              UnNombreDePlace,double UnVolumeTransportableDeMarchandise)
              :Vehicule3(UneImmatriculation, UnNombreDePlace),m_VTM(0.0)
    {
    	VTM(UnVolumeTransportableDeMarchandise);
    }
    Je viens de transformer le constructeur spécifique de CVoiture en ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CVoiture::CVoiture(const char* UneImmatriculation,short
              UnNombreDePlace,double UnVolumeTransportableDeMarchandise)
    {
    }
    et voici ce que ça me donne maintenant (voir jpeg AvecConstructeurModifie)

    Bon, après une journée de recherche (qui m'a permis de mieux comprendre les bases du programme) je suis maintenant persuadé que le problème vient du constructeur spécifique. Le problème n'est pas totalement résolu mais j'y travaille.

    Merci.

    Beegees

Discussions similaires

  1. Mon programme ne voit pas une form
    Par bazoique dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 18/01/2015, 10h23
  2. Lire une ligne de texte dans un tFileStream
    Par tixu dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2009, 11h54
  3. Réponses: 11
    Dernier message: 06/12/2008, 13h15
  4. Mon code ne tient pas sur une ligne
    Par supertoms dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/04/2008, 17h35
  5. Ne pas lire une ligne mais la sauter
    Par poulette3000 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 27/07/2007, 15h19

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