janiaut
Messages postés8Date d'inscriptionjeudi 13 mars 2003StatutMembreDernière intervention30 août 2006
-
22 août 2006 à 09:12
janiaut
Messages postés8Date d'inscriptionjeudi 13 mars 2003StatutMembreDernière intervention30 août 2006
-
23 août 2006 à 09:46
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
*************************************************************************************************
// 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 ----------------------------------
janiaut
Messages postés8Date d'inscriptionjeudi 13 mars 2003StatutMembreDernière intervention30 août 2006 22 août 2006 à 10:26
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.
turnerom
Messages postés492Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention12 janvier 20121 22 août 2006 à 11:06
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
Vous n’avez pas trouvé la réponse que vous recherchez ?