PB lecture fichier

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 27 août 2004 à 21:57
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 30 août 2004 à 18:39
eh oui encore moi !
(d'ailleurs si vous aviez un bon tut pour savoir enfin comment on fait, ca m'arrangerait...)

alors voila:

FILE * fichier =fopen("input.txt","r");
char* flag;
bool end = false;
while (end==false) {
fscanf(fichier,"%c",&flag);
if (strcmp(flag,"E")==0){bool end=true;}
}

ne mache pas. je sais (je crois) que c'est au niveau du strcmp.
Pourquoi?
(!strcmp() ne marche pas non pus )

merci d'avance.

PS : pour lire un char*, c'est bien %c ?
PS 2 : non, je ne veux pas passer en binaire!

13 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 22:29
en fait c'est mauvais partout !

tu as la doc avec des exemples ici
http://www.cplusplus.com/ref/cstdio/

apres faudras revoir quelque base du c

une solution vite fais (le top serais d'utiliser fgets)

char flag[1024];
bool end = false;

while ( !end )
{
if( fscanf(fichier,"%s",flag) == EOF ) break;
if( strcmp(flag,"E")==0 ) end = true;
}
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
28 août 2004 à 12:05
Attention djl il y a quand meme un probleme dans ta source!!
Si la chaine a lire fait plus de 1024 octets tu as un beau buffer overflow --> bug!!
il faut rajouter un gabarit a fscanf().
Si mes souvenirs sint bons, ca dnne un truc du style:

fscanf(fichier,"%.1023s",flag);
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
28 août 2004 à 13:35
merci, j'ai dis que c'etait une solution vite fais et qu'il fallait mieux utiliser fgets
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
28 août 2004 à 16:48
oui, je sais bien que t es pas un debutant, mais il faut mieux le preciser a Arnaud16022 qui a l air d en etre un.
0

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

Posez votre question
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
29 août 2004 à 11:05
c'est gentil...
en fait ca fait un an que je programme mais je n'ai pas trouvé d'explication satisfaisante sur l'écriture/lecture,et mon bouquin n'en dit mot, c'est pour ca que 90% de mes messages ont la dessus.
la fonction ne doit lire qu'un seul caractere, donc char[1024] c'est un peu pcb...
pourquoi fgets c'est mieux?
en tout cas je vais me taper toute la doc, merci pour l'url

ciao
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
29 août 2004 à 11:09
T as du te faire niquer avec un bouquin de merde. J ai fait la meme erreur avec mon 1er livre... Si tu veux un bon livre complet et clair sur le C ANSI il y a celui de Delannoy qui s appelle "C ANSI" qui est vendu par Eyrolles a 19€ je crois. Il est vraiment pas mal.

Sinon si tu veux lire un seul caractere le plus simple c est fgetc().

http://www.cplusplus.com/ref/cstdio/fgetc.html par exemple pour cette fonction...(1er resultat sur google)
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
29 août 2004 à 21:03
merci,j'ai déja aspiré toute la page de c++.com sur stdio....
sinon mon bouquin est tres bien (pour les nuls), mais ne parle pas de la lecture/ecrirure, c'est tout...
en tt cas merci ca marche maintenant
0
fofodavid Messages postés 47 Date d'inscription mardi 18 mars 2003 Statut Membre Dernière intervention 29 août 2004
29 août 2004 à 21:57
FILE * pFile;//déclaration du flux
long lSize;
char * buffer;
char rfich[32];
printf("\n***Lecture de fichier***\n");
printf("\nEntrez le nom du fichier a lire : \n\n");
scanf("%s",&rfich);
pFile = fopen ( rfich , "rb" );//ouverture du fichier en mode lecture
if (pFile==NULL) exit (1);//si le fichier n'existe pas, il quitte le programme

fseek (pFile , 0 , SEEK_END);//renvoie la taille du fichier
lSize = ftell (pFile);
rewind (pFile);//place le pointeur du fichier au debut

buffer = (char*) malloc (lSize);//allocation de la memoire pour stocker le fic
if (buffer == NULL) exit (2);//si le buffer ne contient rien alors ca quitte

fread (buffer,1,lSize,pFile);//copie le fichier dansle buffer
printf(buffer);//affiche a l'ecran le contenu du buffer et donc du fichier

fclose (pFile);//fermeture du flux
free (buffer);//vide le buffer
getch();

fflush(stdin);//vider toutes les entrées clavier

C'est un bout de ma source traitant sur tout ca :
http://www.cppfrance.com/code.aspx?ID=25760
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
29 août 2004 à 22:24
vi je sé je l'ai lu.
en fait je suis un peu perplexe; j'ai l'impression que bcp de fonction st équivalentes les unes aux autres, je sé pas quelles st leurs différences..
je vais encore potasser tt ca un grand coupo, ca ira mieux apres... :)

merci
Ad
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
30 août 2004 à 14:00
fofodavid > ton exemple n'est pas ce qu'il y a de mieux, entre le scanf( "%s"...), le cast du malloc (on est en C), l'oubli du 0 final dans buffer (si tu le traite comme une chaine de caractere), le printf(buffer), le getch() (a la limite, pour ce genre de code autant etre standard jusqu'au bout, la lecture du clavier ca casse tout) et surtout le fflush( stdin ) (dangeureux, pas portable, ne sert à rien...)

free (buffer); ca vide pas buffer
0
fofodavid Messages postés 47 Date d'inscription mardi 18 mars 2003 Statut Membre Dernière intervention 29 août 2004
30 août 2004 à 18:33
dsl si mon code est nul, je voulais essayer d'aider !
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
30 août 2004 à 18:38
pas nul, disons que ca marche mais que c'est dangereux et pas tres portable, justement ce dont un debutant n'a pas besoin
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
30 août 2004 à 18:39
c'est po grave, merci qd meme!
0
Rejoignez-nous