chris5874
Messages postés50Date d'inscriptionmercredi 29 janvier 2003StatutMembreDernière intervention26 janvier 2007
-
20 janv. 2007 à 19:44
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 2016
-
21 janv. 2007 à 20:41
Bonjour,
je cherche a faire une comparaison entre un mot entre avec le clavier et des enregistrements dans un fichier. Malheureusement, malgre tous mes efforts, le programme ne me dit jamais quand les chaines de caracteres comparees sont egales.
Je vous remercie d'avance pour votre aide.
voici le code:
#include <stdio.h>
main(){
FILE* fcategorie=NULL;
FILE* fncategorie=NULL;
char nom_categorie[50];
char temp[75];
char chaine[51];
int rcmp;
int ligne=0;
fcategorie = fopen("categorie.txt", "a");
fclose(fcategorie);
printf("ajout de la categorie\n");
puts("nom de la categorie a ajouter? (1 mot autorise)");
scanf("%s",&nom_categorie);
//check si la categorie existe deja
fcategorie=fopen("categorie.txt","r");
printf("lecture fichier\n");
while (!feof(fcategorie))
{
fgets(chaine,50, fcategorie);
printf("trouve ds le fichier :%s",chaine);
printf("on compare : ");
if ((strcmp(nom_categorie,chaine))==0 )
{
printf("categorie trouvee");
}
else
{
printf("categorie differente");
}
printf("\n");
}
fclose(fcategorie);
puts("fin");
}
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 20 janv. 2007 à 20:00
Salut,
scanf("%s",&nom_categorie); ne peut pas fonctionner, le pointeur sur la chaine c'est ou
nom_categorie ou
&nom_categorie[0] et pas &nom_categorie.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 20 janv. 2007 à 23:42
Si la chaine entrée au clavier a des espaces, utilise gets. scanf coupera la chaine au premier espace.
Essayez d'éviter de lire un fichier caractère par caractère ou par petit bout à la fois. Il est beaucoup plus rapide de tout lire d'un coup et de naviguer dans le buffer avec des pointeurs.
chris5874
Messages postés50Date d'inscriptionmercredi 29 janvier 2003StatutMembreDernière intervention26 janvier 2007 21 janv. 2007 à 08:53
merci pour votre aide.
dans le source j'ai precise 1 mot autorise, (car j'utilise scanf) tout simplement car j'ai eu deja des problemes avec gets. En effet, l'instruction gets etait totalement zappee alors que le code etait ecrit proprement (je me pose d'ailleurs toujours la question d'ou est-ce que cela peut venir...)
Je vous remercie aussi de vos conseils, notamment sur les pointeurs et sur la maniere d'optimiser la lecture du fichier.