Fichier c

Résolu/Fermé
rachou1 Messages postés 30 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 31 décembre 2014 - 30 oct. 2011 à 22:44
rachou1 Messages postés 30 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 31 décembre 2014 - 1 nov. 2011 à 07:43
Bonjour,

Je voudrais creer un programme en c qui recupere des caractere et qui les ecrit dans un fichier appeler fic.txt. J'ai ecrit ce code mais voila a chaque fois que je compile, il y a une erreur "warning : assigment from incompatible pointer type"...
Quelqu'un pourrez m'aider svp ? merci d avance !

int main()
{
int ret;
char c;
FILE * fi = NULL;

printf("Saisir caractere \n");
while((ret = getchar()) ! = (-1)) {
c = (char) ret;
fp = ("fic.txt", "w+");
if(fp == NULL) {
printf("\n Fichier inexistant\n");
return;
}
}
}



7 réponses

le_framboisier Messages postés 7 Date d'inscription lundi 31 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 2
31 oct. 2011 à 12:58
Bonjour,

Je viens de relire ton code à tête reposée.

Il paraît plus simple selon moi de faire :


#include <stdio.h>

int main()
{
int c; // on déclare nos variables
FILE * fi = NULL;//on initialise le pointeur

fi = fopen("fic.txt", "w+");//on tente d'ouvrir le fichier en écriture

if(fi==NULL){ // le test se place ici pas dans la boucle
printf("\n Fichier inexistant\n");
return;
}

do{//une boucle do...while est selon moi plus appropriée

printf("Saisir caractere \n");//on demande d'entrer un caractére

c = getchar();//on récupére le caractére

fputc( c, fi);//on inscrit le caractére dans le fichier

}while(c!=ton_caractere_qui_signale_la_fin_de_l_ecriture)// tout est dit

fclose(fi);//on n'oublie le pointeur !

return 0;
}


Qui devrait compiler sauf distraction.

Cordialement,

le_framboisier.
1
Bonsoir,
fp = fopen("fic.txt", "w+");
devrait mieux marcher
0
le_framboisier Messages postés 7 Date d'inscription lundi 31 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 2
31 oct. 2011 à 02:16
Bonsoir,
la solution de le père est bonne à un détail près il me semble : fp n'est pas défini mais fi si donc
fi = fopen("fic.txt","w+"); est selon moi plus approprié.

Cordialement,

le_framboisier
0
rachou1 Messages postés 30 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 31 décembre 2014 1
31 oct. 2011 à 08:30
Merci pour ces indications :) , il n'y a plus d 'erreur de compilation .
Mais il n'y a toujours rien d'écrit dans mon fichier fic.txt ..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rachou1 Messages postés 30 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 31 décembre 2014 1
31 oct. 2011 à 16:49
Merci beaucoup pour ton aide, en effet ça marche !
Desolé, j'ai a nouveau une question... Au lieu de récupérer les caractères un à un, j'aimerai récupéré une chaine de caractère en entière. Pour cela on utilise bien fgets ? fgets(phrase, size of phrase, fi)
Mais pour la variable c on le laisse en int et on crée une nouvelle variable char phrase[256] pour y mettre la phrase tapé ?
0
le_framboisier Messages postés 7 Date d'inscription lundi 31 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 2
31 oct. 2011 à 21:47
Bonsoir,

Tout d'abord je suis content que cela compile :) .

Ensuite fgets est bien le moyen le plus approprié pour récupérer une chaîne de caractères dans un fichier.
Tu peux effectivement utiliser une variable char phrase[256] pour stocker ta phrase mais cela peut provoquer des erreurs si l'entrée dépasse cette quantité a priori cela ne devrait pas poser de réels problèmes dans ton cas donc tu peux te le permettre
.
Si toutefois ça t'intéresse, tu peux te renseigner sur l'allocation dynamique de mémoire (grâce à malloc) et l'utilisation de l'opérateur sizeof qui sont un bon moyen de gérer ce genre de situation. De plus, la variable c devient alors inutile vu que l'on utilisera seulement phrase[256] pour stocker notre chaîne.

P.S. : l'idéal c'est d'aller voir dans la documentation (pour fgets notamment) :). Google est ton ami ! Et pense à mettre ton sujet en résolu !

Cordialement,

le_framboisier
0
rachou1 Messages postés 30 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 31 décembre 2014 1
1 nov. 2011 à 07:43
D'accord merci beaucoup de ton aide ! :)
0