PB lecture fichier

Signaler
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
-
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

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
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;
}
Messages postés
241
Date d'inscription
mardi 29 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2006

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);
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
merci, j'ai dis que c'etait une solution vite fais et qu'il fallait mieux utiliser fgets
Messages postés
241
Date d'inscription
mardi 29 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2006

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.
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
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
Messages postés
241
Date d'inscription
mardi 29 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2006

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)
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
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
Messages postés
47
Date d'inscription
mardi 18 mars 2003
Statut
Membre
Dernière intervention
29 août 2004

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
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
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
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
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
Messages postés
47
Date d'inscription
mardi 18 mars 2003
Statut
Membre
Dernière intervention
29 août 2004

dsl si mon code est nul, je voulais essayer d'aider !
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
pas nul, disons que ca marche mais que c'est dangereux et pas tres portable, justement ce dont un debutant n'a pas besoin
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
c'est po grave, merci qd meme!