Probleme booleen C
hue_canabis
Messages postés
36
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Probleme booleen C
- Access : Modifier le format d'un Booléen Oui/Non - Forum Programmation
7 réponses
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
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.
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
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 ;)
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.