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
Bonjour,

j'essaye de faire un booleen,

sauvegarde = (sauvegarde) ? fopen ("fsauvegarde.txt","w") : fopen ("fsauvegarde.txt","r") & afficher();

et je recoi une erreur mais je sais pas pourquoi.

( je veux voir si sauvegarde==0, si oui, qu'il me le "creer " avec linstruction write. sinon, kil le lise et ki fasse la fonction affiche.)


merci beaucoup
A voir également:

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
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
0
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
quelle erreur ?
afficher renvoi quoi comme valeur ?
0
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
merci beaucoup, mais je pense que c'est ok.

quand j'ai enlever le & afficher(), je n'ai eu aucune erreur.
0
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
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.
0
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
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?
0

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
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 :
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 ;)
0
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
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.
0
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
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.
0
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
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...
0
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
Même si tu fais pas de fgets, tu as besoin du pointeur pour fermer le fichier avec fclose.
0