Aller au contenu

Aide programmation C++


APZO

Messages recommandés

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

Bonsoir à toutes et à tous,

j'ai une erreur de segmentation lors de l’exécution d'un programme et j'aimerais que vous m'aidiez à la comprendre. Le principe est simple, je lis chaque caractère d'un fichier texte et je dois compter la fréquence de chaque lettre (combien de fois elles sont présentes). Notre professeur nous a imposé d'utiliser la fonction getc dont le profil est le suivant : int getc(FILE *fichier)

cette fonction retourne le caractère suivant lu. Donc voici le bout de code concerné par l'erreur :

post-140756-0-65030800-1330367112_thumb.jpg

après avoir effectué quelques tests, c'est la condition de la boucle qui ne va pas car j'ai essayé de créer un compteur et de faire la boucle genre 4 fois et ça a marché. Et quand je remets la condition ch != EOF ça remet l'erreur de segmentation.

Notre professeur nous a dit que getc retournait EOF quand on arrive à la fin du fichier.

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Membre, Le Dieu Lapin, 37ans Posté(e)
Lapinkiller Membre 10 149 messages
37ans‚ Le Dieu Lapin,
Posté(e)

Bonjour

souvent une erreur de segmentation c'est un problèmes de droits d'accès ;)

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

De quels droits d'accès tu parles ?

Lien à poster
Partager sur d’autres sites

Membre, Le Dieu Lapin, 37ans Posté(e)
Lapinkiller Membre 10 149 messages
37ans‚ Le Dieu Lapin,
Posté(e)

c'est pas forcément ca c'est juste une piste...

ton tableau est il suffisament grand ?

(ca fait longtemps que j'ai pas touché à du c++ ... )

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

Ok. Non ça vient pas de ça, mon tableau est suffisamment grand.

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

Ben, regarde ce que fais ta boucle :

elle lit un caractère, puis elle incrémente le tableau de ce caractère, puis elle teste si ce caractère est une fin de fichier.

Donc si elle lit une fin de fichier, elle incrémente décompte du caractère correspondant (renvoyé par index(EOF) ?!? ) avant de s'arrêter ?

Dit moi, ta fonction index, elle ferait pas un truc du genre return ch-'a'; pour renvoyer le numéro de la lettre dans l'alphabet ? EOF, tu le place ou dans l'alphabet ? Du coup, il te renvoie un nombre négatif....

spoiler:

Faut que tu mette ton tab[index(ch)]++; une seule fois dans ta fonction, juste après le while, et avant la lecture du caractère suivant.

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

Ah oui effectivement ^^, j'ai modifié ça mais ça refait l'erreur de segmentation :

post-140756-0-25124200-1330369609_thumb.jpg

PS : j'ai trouvé le problème, mais je le comprends pas... c'est parce que le texte inclut dans mon fichier se termine par un point. Et quand j'enlève le point final, ça marche :o

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

que te renvoie index('.') ? Au hasard un nombre qui n'est pas un indice possible dans ton tableau ?

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

Le hasard fait bien les choses.. effectivement, c'est vraiment stupide de ma part... merci pour l'aide.

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

:)

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×