cs_sergio18
Messages postés18Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention 4 mai 2004
-
20 févr. 2004 à 18:14
cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005
-
2 mars 2004 à 14:17
salut
Je fais un projet où je dois faire une conversion du fichier.POur cela le prof qui me suit m'a demandé d'effectuer ds un premier temps une lecture ligne par ligne du fichiers et ensuite de comparer les mots.Pour la lecture ligne par ligne,j'ai utilisé fgets et puisque cette fonction ne rencoie que la premiere ligne du fichier,j'ai fait un boucle jusqu'au nbre de lignes du fichier.Jusque là pas de pb mais ma question est:peut-on retrouver des mots avec fgets pr ensuite les comparer?et sui oui comment?
merci d'avance
cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005 22 févr. 2004 à 01:34
Non, fgets te renvoie une chaine de caractères comme te le dit hilairenicolas.
Mais avant de faire des strcmp, il faut que tu extrais les mots des lignes que t'as chopé.
Sois tu le fais toi même : tu parcours la chaine de caractères et à chaque espace bah tu passes à un autre mots (ce que je ferais)... sois tu va voir un peu les sscanf mais ça sera sans doute plus long et plus compliqué!
PS : fais gaffe car le fgets prends le caractère '\n' et le mets dans la chaine, contrairement au gets qui le remplace par '\0'.
cs_sergio18
Messages postés18Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention 4 mai 2004 24 févr. 2004 à 18:54
Je tiens tout d'abord à vous remercier pr vos reponses et j'avais pensé à cette solution à savoir parcourir la chaine et passer à un autre mot à chaque espace mais je ne sais pas comment le coder en C++.Si vous pouvez m'aider j'en serais très heureux.
cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005 24 févr. 2004 à 19:27
char string[100]; // ou plus
char mot[20];
int posmot, poschaine=0;
fgets(string, taille, fichier);
while((string[poschaine] != '\0') && (string[poschaine] != '\n')) // condition de fin de chaine
{
posmot=0; // pour le premier caractère du mot
while(string[poschaine+posmot] != 0x20) // 0x20 = code hexa de l'espace
{
mot[posmot] = string[poschaine+posmot];
posmot++;
}
// éventuellement, pour fermer la chaine...
mot[posmot] = 0x00;
// et à cet endroit la, tu as un mot!
poschaine++;
}
***********************
j'ai fait ca à la volée sans tester... mais si y a bug, t'as quand meme matiere a...
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_sergio18
Messages postés18Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention 4 mai 2004 24 févr. 2004 à 19:48
ok merci je vais le tester.j'ai une autre question:
toi ds ton fgets tu utilise string qui est un tableau de char.moi g utilisé un char*;ça change quelque chose ou pas?
cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005 24 févr. 2004 à 20:02
regarde mieux la déclaration :
char string[100];
-> c'était pour être plus clair (et c'est raté lol).
le string que j'ai déclaré est un char * ... mais appelle le autrement genre, "ligne" ... sinon ton compilateur risque de ne pas apprécier!
cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005 26 févr. 2004 à 18:53
Honnêtement c psa top...
fais juste :
char ligne[200];
et dans ce cas, je t'assure que ligne est de type char* , pas de cast à faire...
d'autre part!
T'aurais du faire :
ligne = (char *)malloc(200 * sizeof(char));
... char faisant 1 octet ça doit être un coup de bol!
D'autre part, si tu fais un malloc, il te faut un free une fois que tu ne te sers plus de ton pointeur! Sinon, t'alloues de la mémoire que tu ne libère jamais!
cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005 2 mars 2004 à 14:17
Oups... j'a gaffé?
Euh, bah lance en debbugger... ca ne doit pas être vilain ;)
Tu sais que ligne[0] ne contient qu'un caractère? Pas un mot!
Le mot est contenu dans ligne (ligne est le pointeur sur la chaine de caractère)...
Aller, en debug avec points d'arrêts tu trouveras le détail qui cloche.
;)