Gestion de retour a la ligne avec fgets
Résolu/Fermé
marie12_2000
Messages postés
27
Date d'inscription
vendredi 22 mars 2019
Statut
Membre
Dernière intervention
29 février 2020
-
Modifié le 22 mars 2019 à 12:12
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 25 mars 2019 à 10:33
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 25 mars 2019 à 10:33
1 réponse
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 22 mars 2019 à 14:30
Modifié le 22 mars 2019 à 14:30
Salut marie12_2000 ,
Il y a une faute de frappe à
Si tu veux lire une ligne avec
http://www.cplusplus.com/reference/cstdio/fgets/
A newline character makes fgets stop reading, but it is considered a valid character by the function and included in the string copied to str.
Comme
Le tableau de char
Dal
Il y a une faute de frappe à
fclose()
Si tu veux lire une ligne avec
fgets(), tu vas devoir lire les
charcontenus dans chaque ligne, dans ton cas 6 : les 5 lettres de tes mots, plus le retour à la ligne
'\n'qui est un
charlu par
fgets():
http://www.cplusplus.com/reference/cstdio/fgets/
A newline character makes fgets stop reading, but it is considered a valid character by the function and included in the string copied to str.
Comme
fgets()arrête sa lecture lorsqu'un
'\n'est rencontré, tu peux passer en 2ème argument de
fgets()la taille de ton tableau de
charavec un simple
sizeof mot, qui indiquera à
fgets()le maximum de
charpouvant être lus.
Le tableau de char
motva donc contenir
'\n', qu'il te faudra supprimer si tu n'en veux pas. Cela peut se faire de différentes façons, par exemple comme cela :
char *p; if ((p = strchr(mot, '\n')) != NULL) *p = '\0';
strchr()recherche l'existence d'un char dans une chaîne de caractères C, et si elle le trouve, elle retourne son adresse mémoire que tu peux stocker dans un pointeur. Avec ce pointeur, tu peux écraser le
'\n'dont tu ne veux pas, et le remplacer par
'\0'pour terminer ta chaîne à cet endroit.
Dal
22 mars 2019 à 21:48
1) en précisant que le nombre maximum de caractères a copier était 5 sachant que je travaille avec des mots de 5 lettres je tiens a le rappeler
2)en précisant que le nombre maximum de caractères a copier était 6
3)en remplaçant les \n et en copiant collant ton code
22 mars 2019 à 21:53
voici le code correct au cas ou ça pourrait aider quelqu'un
25 mars 2019 à 10:11
Tu n'as pas le résultat attendu, car tu ne suis pas mes indications, en ne lisant pas la totalité de chaque ligne à chaque itération, et donc ton affichage est bizarre. Pourquoi ne fais-tu pas ce que je te conseille de faire ?
Comme fgets() arrête sa lecture lorsqu'un '\n' est rencontré, tu peux passer en 2ème argument de fgets() la taille de ton tableau de char avec un simple sizeof mot, qui indiquera à fgets() le maximum de char pouvant être lus.
donc écris : et cela t'évitera de lire tes lignes de façon incomplète à un ou deux caractères près, comme tu le fais ...
Ensuite, ta question initiale dans ce post est que tu lis les et que tu n'en veux pas, tu dis :
je n'ai pas réussi a me débarrasser des \n
Je t'ai donc donné une solution à ce problème pour t'en débarrasser. Si, ensuite, tu veux afficher un mot par ligne, il te faudra bien sûr remettre un dans tes , donc : , sinon, tu vas afficher les mots à la suite (sauf, si c'est ce que tu veux faire, mais c'est toi qui décide et ne te plaint pas que les mots s'affichent désormais à la suite si tu ne rajoute pas un retour à la ligne) ...
Je ne t'explique rien de nouveau, je crois ... :-)
Dal
25 mars 2019 à 10:24
25 mars 2019 à 10:33