Aller au contenu

Aide programmation C++


Messages recommandés

APZO Membre 199 messages
Forumeur inspiré‚
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.

Partager ce message


Lien à poster
Partager sur d’autres sites
Annonces
Maintenant
Lapinkiller Membre 10 109 messages
Le Dieu Lapin‚ 30ans
Posté(e)

Bonjour

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

Partager ce message


Lien à poster
Partager sur d’autres sites
APZO Membre 199 messages
Forumeur inspiré‚
Posté(e)

De quels droits d'accès tu parles ?

Partager ce message


Lien à poster
Partager sur d’autres sites
Lapinkiller Membre 10 109 messages
Le Dieu Lapin‚ 30ans
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++ ... )

Partager ce message


Lien à poster
Partager sur d’autres sites
APZO Membre 199 messages
Forumeur inspiré‚
Posté(e)

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

Partager ce message


Lien à poster
Partager sur d’autres sites
miq75 Membre 2 862 messages
90°‚ 42ans
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.

Modifié par miq75

Partager ce message


Lien à poster
Partager sur d’autres sites
APZO Membre 199 messages
Forumeur inspiré‚
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

Modifié par APZO

Partager ce message


Lien à poster
Partager sur d’autres sites
miq75 Membre 2 862 messages
90°‚ 42ans
Posté(e)

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

Partager ce message


Lien à poster
Partager sur d’autres sites
APZO Membre 199 messages
Forumeur inspiré‚
Posté(e)

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

Partager ce message


Lien à poster
Partager sur d’autres sites
Annonces
Maintenant

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×

Information importante

Ce site internet utilise des cookies pour améliorer l'expérience utilisateur. En naviguant sur ce site vous acceptez que des cookies soient placés sur votre navigateur. Conditions d’utilisation Politique de confidentialité