Comment sauvegarder lors d'un remplissage de fichier? [C] - C - Programmation
Marsh Posté le 08-10-2013 à 20:26:27
ReplyMarsh Posté le 08-10-2013 à 20:35:14
EXAAAAAACT ! Merci beaucoup
En revanche je dois maintenant réaliser une fonction permettant d'extraire les déplacements de cet employé.
J'ai donc créé la fonction suivante :
Code :
|
Le problème est que je dois mettre 0 pour arrêter la fonction précédente, et qu'aucun employé n'est donc trouvé..
Merci de votre aide
Marsh Posté le 08-10-2013 à 20:37:13
C'est un autre problème, et j'ai pas compris la question.
Marsh Posté le 08-10-2013 à 20:42:17
A ouais, j'ai pigé.
Tu peux pas procéder comme tu a fait puisque numéro vaut 0 avant que tu lise numéro dans le fichier.
Tu dois d'abord lire numéro pour le comparer à numéro2 et afficher s'il sont égau.
Marsh Posté le 08-10-2013 à 20:42:17
En fait, je dois créé une fonction permettant de saisir le numéro de l'employé, le programme doit ensuite renvoyer les 3 autres informations correspondantes (Jour de départ, Jour d'arrivé, Code Lieu).
Marsh Posté le 08-10-2013 à 20:45:18
Je ne vois pas comment tu veux procéder, si tu pouvais me donner un petit coup de pouce, ce serait sympa
Marsh Posté le 08-10-2013 à 20:53:30
ludoztw a écrit : Je ne vois pas comment tu veux procéder, si tu pouvais me donner un petit coup de pouce, ce serait sympa |
Tu dois faire une boucle qui affiche tous les enregistrement pour un employé.
|
Marsh Posté le 08-10-2013 à 23:43:26
Comment faut-il faire pour commencer la boucle ? While?
Et comment lire l'enregistrement? Grâce au fscanf?
Merci
Marsh Posté le 09-10-2013 à 00:15:39
Je ne sais pas, je vais voir.
Ca doit être une question de documentation.
Marsh Posté le 09-10-2013 à 00:47:55
T'as terminé ?
J'espère...
Voici le code dans le même esprit, n'oublie pas de fermer le fichier à la fin de l'utilisation.
Code :
|
Marsh Posté le 09-10-2013 à 09:02:28
ludoztw a écrit : Comment faut-il faire pour commencer la boucle ? While? |
Bonjour
Code :
|
ludoztw a écrit : Et comment lire l'enregistrement? Grâce au fscanf? |
T'as plusieurs méthodes. Si ton fichier est écrit en lignes (typiquement un fichier texte) tu peux utiliser fgets(). Si tu dois lire des octets tu peux utiliser fgetc() ou fread(). Si tu as des enregistrements bien formatés tu peux alors utiliser fscanf()....
Non. feof() ne sert pas à ça et ne s'utilise pas de cette manière.
feof() sert, une fois que le fichier a été entièrement lu et que la fonction de lecture renvoie la valeur spéciale mentionnée plus haut, à indiquer si la lecture ne se fait plus à cause de la fin de fichier ou pour un autre raison (une erreur, etc). Il ne sert pas à arrêter une boucle de lecture car la boucle s'arrête, certes, mais un coup trop tard et le traitement est fait une fois de trop. Ou alors on teste fscanf() mais alors cela revient à écrire
Code :
|
ce qui est la méthode habituelle de lecture d'un fichier
Non, si f est null ce n'est pas parce que le fichier ne contient aucune information mais c'est qu'il y a eu un problème à l'ouverture. Parce que, même vide, un fopen() qui fonctionne ne retourne pas NULL
Sinon c'est dommage de dédoubler les instructions de saisies du n°. C'est plus pratique (voire même plus élégant) d'écrire ceci
Code :
|
...
Marsh Posté le 09-10-2013 à 11:19:19
Quand tu dis feof ne sert pas à ça. Tu penses à quoi ?
Marsh Posté le 09-10-2013 à 14:50:40
Je pense à la façon dont tu t'en sers, pour arrêter le traitement. Parce que feof ne sert pas à arrêter une boucle de lecture+traitement. Parce que dans ce cas, le traitement est fait une fois de plus que le nombre d'informations réelles que contient le fichier. Parce que, quand ton programme lit la dernière info du fichier, celle-ci est traitée mais tu n'as pas encore atteint la fin de fichier. Et donc, à l'itération suivante, feof() renvoie toujours 0. Donc tu fais alors une lecture supplémentaire qui ne lit plus rien mais comme tu ne la testes pas, tu fais quand-même le traitement associé.
Exemple: crées un fichier contenant ces 3 lignes
Code :
|
Et testes le code suivant
Code :
|
Tu auras comme résultat
Code :
|
Le texte affiché entre les crochets de la 4° ligne pourra être différent selon le compilateur et l'os mais une chose est certaine, c'est que tu auras un printf() de plus que le nombre réel de lignes parce qu'à la fin de la dernière ligne lue, feof() n'est pas activé.
Une solution est alors de tester si fgets() a renvoyé NULL (ce qui se passe à la 4° lecture) et quitter la boucle si c'est le cas mais cela amène alors rapidement la conclusion logique que feof() ne sert à rien ici et que la fin de fichier peut tout aussi bien être détectée via fgets() (ou toute autre fonction de lecture).
Code :
|
Ensuite, après la boucle, on peut si on veut utiliser feof() pour indiquer si tout le fichier a été lu ou bien si la lecture a été interrompue avant la fin (à cause par exemple d'une erreur IO)
Code :
|
Marsh Posté le 09-10-2013 à 16:33:20
Merci Sve@r, désolé d'avoir introduit une erreur, comme feof est utilisé ainsi dans plusieurs exemple du net, j'ai copié.
Marsh Posté le 08-10-2013 à 20:22:20
Bonsoir à tous & merci de votre aide
J'ai un TP à réaliser en programmation, il m'est demandé de saisir et de remplir un fichier des données que je dois rentré.
Mon problème est que lorsque j'inscris mes valeurs, elles écrasent mes précédentes, je voudrais qu'elles se rajoutent à la suite de mon fichier.
Voici mon code :
Merci de votre aide