Problème getline pour la lecture d'un fichier C++

[Résolu]
Signaler
Messages postés
8
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
30 août 2006
-
Messages postés
8
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
30 août 2006
-
Bonjour, je suis novice dans la programmation en C/C++ et j'ai quelques problèmes sur la lecture d'un fichier. Je vous explique ce qu'on me programme doit faire :
Mon but est de lire un fichier "fichier.txt" contenant des chaines de caractères à verifier. Dans un premier temps le fichier contient

nondata
nondata
0
0

J'utilise la fonction getline mais lorsque je compare la valeur à "nondata", le test me retourne faux. Et je n'arrive pas a comprendre pourquoi, pouvez vous m'aider. Merci bcp voici le code

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <fstream>
#include <string>
#include




using namespace std;

 *************************************************************************************************
// MAIN
// ------------------------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])

    char* chain;
    char* last = "00";
    char* valeur = "00";;
    char* current;
    char* next;


    std::ifstream fichier( "fichier.txt" );
    std::string ligne; // variable contenant chaque ligne lue
    if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
    {
       // cette boucle s'arrête dès qu'une erreur de lecture survient
        if ( std::getline( fichier, ligne ) )
        {
            // créer le buffer pour copier la chaîne
            size_t size = ligne.size() + 1;
            char * buffer = new char[ size ];
            // copier la chaîne
            strncpy( buffer, ligne.c_str(), size );   //conversion strinf en char*
            // utiliser le buffer
            current = buffer;
        }
    }
    while(std::getline( fichier, ligne ))
    {
        // créer le buffer pour copier la chaîne
        size_t size = ligne.size() + 1;
        char * buffer = new char[ size ];
        // copier la chaîne
        strncpy( buffer, ligne.c_str(), size);
        // utiliser le buffer
        next = buffer;
        if(current == NULL) 
           current = "silence";
        if(next == NULL) 
           next = "silence";
        if(current == "silence")
        {
            if((last=="01")&&(last=="10"))
            {
                printf("erreur dans le fichier valeur non reconnue);
            }
            else
            {
                if(last=="00") valeur="00";
                else valeur = "11";
            }
        }
        else if(current == "nondata")           //problème du test !!!!!!!!!! HELP ME
        {                                                    // ne vas pas dans la boucle
         if(last=="00")
         {
             valeur="01";
         }
         else 
         if (last=="11") 
         {
             valeur="10";
         }  
         else if (last=="01")
         {
             if((next=="nondata")||(next=="zero")) valeur="10";
             else if((next=="one")||(next=="silence"))valeur="11";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else if (last=="10")
         {
             if((next=="nondata")||(next=="zero")) valeur="01";
             else if((next=="one")||(next=="silence"))valeur="00";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else printf("erreur dans le fichier valeur non reconnu");
     }
     else if(current == "one")
     {
         if (last=="00")
         {
             if((next=="nondata")||(next=="zero")) valeur="10";
             else if((next=="one")||(next=="silence"))valeur="11";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else if (last=="11")
         {
             if((next=="nondata")||(next=="zero")) valeur="01";
             else if((next=="one")||(next=="silence"))valeur="00";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else printf("erreur dans le fichier valeur non reconnu"); 
     }
     else if(current == "zero")
     {
         if (last=="01")
         {
             if((next=="nondata")||(next=="zero")) valeur="01";
             else if((next=="one")||(next=="silence"))valeur="00";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else if (last=="10")
         {
             if((next=="nondata")||(next=="zero")) valeur="10";
             else if((next=="one")||(next=="silence"))valeur="11";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else printf("erreur dans le fichier valeur non reconnu"); 
      }
      else
      printf("erreur dans le fichier valeur non reconnu");
      printf("%s",valeur);
      last = valeur;
     current = chain; 
    }
}

//------------------------------ MERCI BEAUCOUP   ----------------------------------

5 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Faut utiliser strncmp pour comparer deux chaines:

if (strncmp(current, "silence", 7) == 0)

    {

    }


Au passage, ca, c'est archi faux:

if(next == NULL) 

    next = "silence";


Mais pk tu mélanges string et char* ? utilise que des string...
Messages postés
8
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
30 août 2006

Merci a tous vous m'avez bien aiguillé, en fait j'ai tout passé en string et effectué les test de la manière suivante :


string var;


if(var= =(string)"nondata") ....


encore merci   luhtor et =304809 turnerom  
Messages postés
8
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
30 août 2006

Je te remercie, je vais essayer cela ce soir car la j'ai pas de quoi développer.


Oui je sais que je mélange mais comme je suis novice, j'ai pris des bout de programme à droite à gauche. et certain avec des char* (calcul de CRC). Est-ce compliquer de tout changer, y'a-t-il une méthode simple pour rendre mon code "beau" et uniforme.


Merci
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
La méthode de luhtor est la bonne pour ton problème sauf si utilise des
string partout, dans ce cas == marche, ce que je te conseil .


Par contre pour rendre ton code uniforme et beau, tu peux le décomposer
et ne pas tout mettre dans le main. Fait une fonction pour chaque test
qui renvoi true ou false par exemple en fonction du resultat plus ton
parametre valeur passé par référence a chaque fonction pour pouvoir
être modifié!

TuRn3r
Messages postés
8
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
30 août 2006

Merci beaucoup a tous, avec vos info cela devrait marché.