Si tu as envie de l'apprendre, alors rien ne t'interdit de télécharger un tutoriel et le lire.
un char fonctionne comme un int. D'ailleurs un char n'est rien d'autre qu'un nombre compris entre -128 et 127. Donc en fait, un char peut être vu comme un petit int.
Et une fonction devant modifier le contenu d'un variable (comme par exemple
scanf()) reçoit
toujours l'adresse de cette variable donc presque toujours "&var". Seule exception: quand la variable est un tableau (comme une string) car le nom du tableau correspond à l'adresse de son premier élément (autrement dit,
pers.nom équivaut à
&pers.nom[0] donc quand tu passes "pers.nom" à
scanf() c'est déjà une adresse que tu passes).
Je n'ai pas dit que la manière était mauvaise (encore que l'utilité d'une telle fonction qui ne fait que rajouter un message à l'action de
fopen()...), j'ai dit que tu avais commis une erreur. "fic" c'est une adresse. C'est l'adresse reçue par la fonction. Cette adresse n'est pas modifiée donc si elle n'est pas nulle dès le départ (donc si l'appelant n'a pas passé "null" à cette fonction lors de son appel) elle ne le sera jamais.
Ce n'est pas "fic" qui est modifié. Tu écris
*fic=fopen(...) donc c'est "étoile fic" qui reçoit le retour de
fopen(). Donc c'est lui qu'il faut tester.
Tu surlignes ton code et tu appuies sur le bouton "#" situé dans le bandeau d'édition. Ou bien tu le mets entre balises

. Ou bien tu regardes comment j'ai fait dans mon post précédent.
On entre dans le programme par le main, on en sort par le main. Toute autre fonction (forcément interne car forcément appelée par le main ou par une autre fonction elle-même appelée par le main) doit impérativement se terminer et rendre la main à son appelant (comme des poupées russes). Si la fonction a un souci et que l'appelant doit en être informé alors elle renvoie une valeur spéciale indiquant "j'ai un souci" (comme par exemple
malloc() ou
fopen() renvoient NULL quand elles ne peuvent pas allouer ou ouvrir le fichier ; et comme
read() renvoie -1 quand il ne peut pas lire). Et l'appelant peut alors gérer le souci. Et s'il ne le peut pas alors il renvoie lui aussi une valeur spéciale à son propre appelant et ainsi de suite jusqu'au main() qui, lui, peut alors quitter par
exit() ou alors par
return (car main() est aussi une fonction).
Ah oui mais là tu tentes de courir sans avoir appris à marcher. Ne plus avoir de warning signifie que la syntaxe est correcte mais si tu ne passes pas les bons éléments aux bonnes fonctions, le programme lui ne produira pas les bons résultats.
Partager