Pb de lecture dans un fichier avec la fonction fgets
Bonjou,
J'ai un pb très blocant de lecture d'une donnée dans un fichier:
mon main est:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| int main()
{
char x[10];
char in[10];
FILE *fin;
scanf("%s",in);
fin=fopen(in,"r");
fgets(x,10,fin);
fclose(fin);
printf("x vaut %s",x);
} |
=> le fichier en entrée contient un seul nombre (1.12) et la fonction me renvoit
x vaut {\rtf1\ma
alors que je m'attends à x vaut 1.12 !!
où est mon erreur?
Marci
Edit : merci de penser a la balise code
Re: Pb de lecture dans un fichier avec la fonction fgets
:tagcode:
Code incomplet. Merci de poster du code compilable.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
main.c: In function `main_':
main.c:12: error: `FILE' undeclared (first use in this function)
main.c:12: error: (Each undeclared identifier is reported only once
main.c:12: error: for each function it appears in.)
main.c:12: error: `fin' undeclared (first use in this function)
main.c:14: error: implicit declaration of function `scanf'
main.c:14: warning: nested extern declaration of `scanf'
<internal>:0: warning: redundant redeclaration of 'scanf'
main.c:15: error: implicit declaration of function `fopen'
main.c:15: warning: nested extern declaration of `fopen'
main.c:17: error: implicit declaration of function `fgets'
main.c:17: warning: nested extern declaration of `fgets'
main.c:19: error: implicit declaration of function `fclose'
main.c:19: warning: nested extern declaration of `fclose'
main.c:21: error: implicit declaration of function `printf'
main.c:21: warning: nested extern declaration of `printf'
<internal>:0: warning: redundant redeclaration of 'printf' |
Citation:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
int main()
{
char x[10];
char in[10];
FILE *fin;
scanf("%s",in);
fin=fopen(in,"r");
fgets(x,10,fin);
fclose(fin);
printf("x vaut %s",x);
} |
=> le fichier en entrée contient un seul nombre (1.12) et la fonction me renvoit
alors que je m'attends à x vaut 1.12 !!
où est mon erreur?
- Manque <stdio.h>
- fopen() peut échouer (NULL).
- main() retournant un int, il faut un return 0,; par exemple (mais facultatif en C99)
Avec le fichier texte 'xx':
et ce code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
#include <stdio.h>
int main (void)
{
int err = 1;
char in[10];
char x[10];
int n = scanf ("%s", in);
if (n == 1)
{
FILE *fin = fopen (in, "r");
if (fin != NULL)
{
if (fgets (x, sizeof x, fin) != NULL)
{
err = 0;
}
fclose (fin);
}
else
{
perror (in);
}
}
if (!err)
{
printf ("x vaut %s\n", x);
}
return 0;
} |
Ca fonctionne :
Je ne recommande pas scanf() pour les saisies (ici, l'usage que tu en fais est très dangereux).
http://emmanuel-delahaye.developpez....tes.htm#saisie
http://emmanuel-delahaye.developpez....s.htm#fichiers