[Besoin d'aide]Projet en langage C : pointeur
Fermé
Reveur-ml
-
6 nov. 2005 à 19:53
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 6 nov. 2005 à 21:22
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 6 nov. 2005 à 21:22
A voir également:
- [Besoin d'aide]Projet en langage C : pointeur
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Musique projet x ✓ - Forum Musique / Radio / Clip
- Filigrane projet - Guide
2 réponses
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
6 nov. 2005 à 21:06
6 nov. 2005 à 21:06
Salut,
Un peu long, le POST ;-)
En C, FILE est une structure défini dans stdio.h et elle est utilisée par les
fonctions réalisant des Entrées/Sorties sur des fichiers.
La logique dans tout langage informatique pour manipuler les fichiers en
lecture est le suivant :
Les fonction ouvrir, lire et fermer travaillent sur le fichier, elles correspondent
à peu près aux fonction fopen(), fgets() et fclose().
La fonction fin_de_fichier() n'est pas utile ici car en C tu peux directement
le savoir en testant le code de retour de fgets(). En C, L'identifiant de fichier
id_fichier correspond à une structure de type FILE, qui t'es retournée sous
forme de pointeur par fopen(). Tu te moques de cette structure, tu te
contentes de passer le pointeur à fgets() et fclose()
Le second problème consiste à decoder les lignes lues dans le fichier, ton algo
pour la fonction de lecture devient alors :
Afin d'éviter les fuites de mémoire ne pas oublier dans les cas d'erreur
de désallouer le shred (si il a été alloué) et de fermer le fichier (si il a été
ouvert).
atoi() va t'aider à convertir une valeur numérique sous forme de chaine
de caratère en entier : atoi( "123\0"[char *] ) = 123 [int].
Une petite remarque en passant dans void shredDestroy(shred *s), tu oublies
le free du shred s.
Espérant ne pas dire trop de conneries car j'ai lu en diagonale et que ça t'aide.
La prochaine essaies de synthétiser pour mieux expliquer où est ton problème.
A+, crabs
Un peu long, le POST ;-)
En C, FILE est une structure défini dans stdio.h et elle est utilisée par les
fonctions réalisant des Entrées/Sorties sur des fichiers.
La logique dans tout langage informatique pour manipuler les fichiers en
lecture est le suivant :
id_fichier = ouvrir( "le fichier", mode_lecture ) TANQUE NON( fin_de_fichier( id_fichier ) ) DEBUT info= lire( id_fichier ) ; traiter( info ) FIN fermer( id_fichier )
Les fonction ouvrir, lire et fermer travaillent sur le fichier, elles correspondent
à peu près aux fonction fopen(), fgets() et fclose().
La fonction fin_de_fichier() n'est pas utile ici car en C tu peux directement
le savoir en testant le code de retour de fgets(). En C, L'identifiant de fichier
id_fichier correspond à une structure de type FILE, qui t'es retournée sous
forme de pointeur par fopen(). Tu te moques de cette structure, tu te
contentes de passer le pointeur à fgets() et fclose()
Le second problème consiste à decoder les lignes lues dans le fichier, ton algo
pour la fonction de lecture devient alors :
ouvrir le fichier -> traiter les erreurs lire une ligne -> traiter les erreurs decoder cette ligne pour affecter 'nb_de_valeur' allouer le'shred' avec ces 2 'vector' nb_valeur_lue = 0 TANT.QUE ( lire une ligne n'est pas NULL ) DEBUT si ( nb_valeur_lue > nombre_de_valeur ) erreur fichier trop gros decoder la valeur droite -> remplir le vector droit du shred decoder la valeur gauche -> remplir le vector gauche du shred FIN si ( nb_valeur_lue < nombre_de_valeur ) erreur fichier trop petit fermer le fichier retourner le pointeur sur le shred
Afin d'éviter les fuites de mémoire ne pas oublier dans les cas d'erreur
de désallouer le shred (si il a été alloué) et de fermer le fichier (si il a été
ouvert).
atoi() va t'aider à convertir une valeur numérique sous forme de chaine
de caratère en entier : atoi( "123\0"[char *] ) = 123 [int].
Une petite remarque en passant dans void shredDestroy(shred *s), tu oublies
le free du shred s.
Espérant ne pas dire trop de conneries car j'ai lu en diagonale et que ça t'aide.
La prochaine essaies de synthétiser pour mieux expliquer où est ton problème.
A+, crabs
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
6 nov. 2005 à 21:22
6 nov. 2005 à 21:22
J'ajoute un petit truc à ce qu'a dis crabs.
Tu dois lire ligne par ligne.
A priori le fichier est ecris de telle sorte qu'une ligne fasse cette taille maximum:
sachant que '\n' représente le caractère de fin de ligne.
En espérant qu'un pixel ne peut excéder 1 octet (jamais eu de cours sur l'image)...
Si c'est le cas, tes valeurs ne dépasseront pas 255.
Donc pour lire ligne par ligne, il faudra lire par intervalle de 8 octets (nombre de caractères) et décomposer tout ça (excepté pour la première ligne).
N'oublie pas de restranscrire le '\0' à chaque fois que tu recrées une chaine de caractère, tu en auras besoin pour atoi...
Ca signifie qu'un pointeur qui prend une chaine de caractère doit prévoir le '\0' de la fin.
Tu dois lire ligne par ligne.
A priori le fichier est ecris de telle sorte qu'une ligne fasse cette taille maximum:
252 252\n...les 252, c'est juste pour exemple...
sachant que '\n' représente le caractère de fin de ligne.
En espérant qu'un pixel ne peut excéder 1 octet (jamais eu de cours sur l'image)...
Si c'est le cas, tes valeurs ne dépasseront pas 255.
Donc pour lire ligne par ligne, il faudra lire par intervalle de 8 octets (nombre de caractères) et décomposer tout ça (excepté pour la première ligne).
N'oublie pas de restranscrire le '\0' à chaque fois que tu recrées une chaine de caractère, tu en auras besoin pour atoi...
Ca signifie qu'un pointeur qui prend une chaine de caractère doit prévoir le '\0' de la fin.