Probleme booleen C
Fermé
hue_canabis
Messages postés
36
Date d'inscription
vendredi 16 janvier 2009
Statut
Membre
Dernière intervention
6 février 2010
-
2 févr. 2009 à 14:06
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 2 févr. 2009 à 15:44
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 2 févr. 2009 à 15:44
A voir également:
- Probleme booleen C
- Booléen en c ✓ - Forum C
7 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
2 févr. 2009 à 14:40
2 févr. 2009 à 14:40
Salut,
et je recoi une erreur mais je sais pas pourquoi.
Normal, ta fonction fopen() renvoie un FILE* et non un int.
Sinon, tu peux ouvrir ton fichier directement en mode "a+", cela le créera si le fichier n'existe pas.
Sinon, si tu veux juste lancer la fonction afficher() au cas où le fichier existe, fais le proprement. Avec des if else, plutôt qu'avec l'opérateur ternaire qui ne se prête pas à un cas comme celui-ci.
Cdlt
et je recoi une erreur mais je sais pas pourquoi.
Normal, ta fonction fopen() renvoie un FILE* et non un int.
Sinon, tu peux ouvrir ton fichier directement en mode "a+", cela le créera si le fichier n'existe pas.
Sinon, si tu veux juste lancer la fonction afficher() au cas où le fichier existe, fais le proprement. Avec des if else, plutôt qu'avec l'opérateur ternaire qui ne se prête pas à un cas comme celui-ci.
Cdlt
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
2 févr. 2009 à 14:43
2 févr. 2009 à 14:43
quelle erreur ?
afficher renvoi quoi comme valeur ?
afficher renvoi quoi comme valeur ?
hue_canabis
Messages postés
36
Date d'inscription
vendredi 16 janvier 2009
Statut
Membre
Dernière intervention
6 février 2010
2 févr. 2009 à 14:57
2 févr. 2009 à 14:57
merci beaucoup, mais je pense que c'est ok.
quand j'ai enlever le & afficher(), je n'ai eu aucune erreur.
quand j'ai enlever le & afficher(), je n'ai eu aucune erreur.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
2 févr. 2009 à 15:12
2 févr. 2009 à 15:12
Oui c'est bien ce que je te dis.
fopen renvoie un FILE*, donc pour faire un et bit à bit, ça marche pas. D'où l'erreur. Si tu enlèves le &affiche(), tu auras juste un warning. Encore faut-il l'afficher.
fopen renvoie un FILE*, donc pour faire un et bit à bit, ça marche pas. D'où l'erreur. Si tu enlèves le &affiche(), tu auras juste un warning. Encore faut-il l'afficher.
hue_canabis
Messages postés
36
Date d'inscription
vendredi 16 janvier 2009
Statut
Membre
Dernière intervention
6 février 2010
2 févr. 2009 à 15:21
2 févr. 2009 à 15:21
sauvegarde = (sauvegarde) ? fopen ("fsauvegarde.txt","w") : fopen ("fsauvegarde.txt","r")
afficher();
c'est ce que j'ai mis. mais je comprend pas pourquoi ca ne va pas marcher?
je demande si sauvegarde est null, si oui faire la premiere instruction sinon faire lautre.
et ds les 2 cas l'afficher ( s'il est vide il affichera rien)
je sais que c'est un FILE*, mais il peut etre = a 0 non?
afficher();
c'est ce que j'ai mis. mais je comprend pas pourquoi ca ne va pas marcher?
je demande si sauvegarde est null, si oui faire la premiere instruction sinon faire lautre.
et ds les 2 cas l'afficher ( s'il est vide il affichera rien)
je sais que c'est un FILE*, mais il peut etre = a 0 non?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
2 févr. 2009 à 15:29
2 févr. 2009 à 15:29
Tu as oublié un ";" à la fin.
Oui ça peut être égal au pointeur NULL qui faut 0. Mais, c'est tout. de toute façon, ça génère un warning à la compilation. Donc il faut faire autrement.
Tout simplement :
Et ne pas oublier de fermer le fichier avec fclose.
De plus, il vaut mieux toujours regarder si le pointeur n'est pas NULL avant d'entreprendre des actions dessus comme des fgets, sinon segfault ;)
Oui ça peut être égal au pointeur NULL qui faut 0. Mais, c'est tout. de toute façon, ça génère un warning à la compilation. Donc il faut faire autrement.
Tout simplement :
if(sauvegarde) fp=fopen(...); else{ fp=fopen(...); afficher(...); }
Et ne pas oublier de fermer le fichier avec fclose.
De plus, il vaut mieux toujours regarder si le pointeur n'est pas NULL avant d'entreprendre des actions dessus comme des fgets, sinon segfault ;)
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
2 févr. 2009 à 15:32
2 févr. 2009 à 15:32
As tu bien mis un ';' à la fin de ta ligne ?
Oui, un FILE* peut être considérer comme un entier, car c'est un pointeur. Ce qui était moche dans ta notation, c'est que si aficher() renvoie un void, là il a de quoi raler. Deuxième problème, le & binaire va te modifier la valeur du pointeur retourné par fopen, est modifé, donc perdu, ce qui est ennuyeu pour le fermer par la suite.
Oui, un FILE* peut être considérer comme un entier, car c'est un pointeur. Ce qui était moche dans ta notation, c'est que si aficher() renvoie un void, là il a de quoi raler. Deuxième problème, le & binaire va te modifier la valeur du pointeur retourné par fopen, est modifé, donc perdu, ce qui est ennuyeu pour le fermer par la suite.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
2 févr. 2009 à 15:41
2 févr. 2009 à 15:41
Oui, un FILE* peut être considérer comme un entier, car c'est un pointeur
Oui, mais encore faut-il caster, sinon on a un warning ;) De plus, un int n'est pas tip top, éventuellement un unsigned int.
Oui, mais encore faut-il caster, sinon on a un warning ;) De plus, un int n'est pas tip top, éventuellement un unsigned int.
hue_canabis
Messages postés
36
Date d'inscription
vendredi 16 janvier 2009
Statut
Membre
Dernière intervention
6 février 2010
2 févr. 2009 à 15:39
2 févr. 2009 à 15:39
j'essayerai la compilation plus tard. si sa marche parfaitement je le garde, sinon je ferai comme l'a dit fiddy
mon pointeur je ne l'utilise pas pour des fgets etc...
mon pointeur je ne l'utilise pas pour des fgets etc...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
2 févr. 2009 à 15:44
2 févr. 2009 à 15:44
Même si tu fais pas de fgets, tu as besoin du pointeur pour fermer le fichier avec fclose.