je suis en train de coder en C un programme qui doit lire dans un fichier une série de lignes et les ajouter à une liste chainée. Pour ce faire, j'utilise la fonction fgets, tel que ceci:
Je pense que le problèmes est le suivant: dans ton fichier, la ligne de la plaque d'immatriculation est AA123AA\n
Comme tu dis à fgets() que la taille de ton buffer est de 8, que fait fgets() ? Il lit au plus 7 caractères, puis place le \0 à la fin du buffer. Mais le \n n'a pas été lu, et c'est le fgets() suivant qui le lit....
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Je pense que le problèmes est le suivant: dans ton fichier, la ligne de la plaque d'immatriculation est AA123AA\n
Comme tu dis à fgets() que la taille de ton buffer est de 8, que fait fgets() ? Il lit au plus 7 caractères, puis place le \0 à la fin du buffer. Mais le \n n'a pas été lu, et c'est le fgets() suivant qui le lit....
J'ai essayé de changer le paramètre du fgets à sizeof(immatriculation)+1, mais ça ne compile pas.
Gam' a écrit:
Pardon j'ai oublié, peux-tu donner un exemple du fichier dont tu lis les informations ?
La première ligne indique combien de voitures sont dans la liste chainée:
J'ai essayé de changer le paramètre du fgets à sizeof(immatriculation)+1, mais ça ne compile pas.
Non, tu déclares ta variable char[9]....
Mais ce que tu as écrit compile, mais peut-être veux-tu dire que ton programme se crash ?
- Edité par edgarjacobs il y a 3 minutes
Je viens d'essayer avec char[9], même problème. Comme tu le dis, le programme compile mais crash:
Edit: je viens d'enlever la dernière lettre de la première immatriculation et le problème c'est réglé: ça doit être à cause du \n. Par contre, je ne vois pas comment résoudre le problème: est-ce qu'il faut que je rajoute un caractère en plus dans ma structure et dans mon sous-programme?
- Edité par Sobrelouis123 19 février 2018 à 16:50:17
Je viens de regarder ton fichier. Tu n'as qu'une seule fois l'indication du nombre d'enregistrements (3), mais tu le lis (dans poubelle) à chaque fois que tu appelles ta fonction !
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Je viens de regarder ton fichier. Tu n'as qu'une seule fois l'indication du nombre d'enregistrements (3), mais tu le lis (dans poubelle) à chaque fois que tu appelles ta fonction !
Oups. Je viens de le corriger. Par contre, le problème reste le même (c.f. edit de mon dernier post):
Immatriculation: AA123AA
Marque:
Modele: Mercedes-Benz
Type de carburant: AMG GT
Vitesse maximum: 32767
Immatriculation: Essence
Marque:
Modele: 320
Type de carburant: AA123AB
Vitesse maximum: 32767
Immatriculation: Tesla
Marque: Model S
Modele: Electricite
Type de carburant: 240
Vitesse maximum: 32767
J'ai laissé le char[8] parce que sinon j'ai droit à un abort
Ça ne fonctionnera pas. Tu ferais bien de lire le man de fgets()
- Edité par edgarjacobs il y a environ 1 heure
C'est bon, ça fonctionne. Merci beaucoup!
- Edité par Sobrelouis123 19 février 2018 à 19:55:22
Problème avec la fonction fgets
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent