Requete dans un fichier en langage C
basopro
Messages postés
100
Date d'inscription
Statut
Membre
Dernière intervention
-
Aoec -
Aoec -
Bonjour,
Je me je realise un petit programme qui compare un cahaine de caracteres a une autre qui se trouve dans un fichier.
pour la lecture dans le fichier jarrive a le faire sans probleme. Mais pendant l'execution, le fonction
et
egendrent une erreur d'exécution , pourtant j'ai belle et bien mentionné le bibliotheque suivante :
Apres ça j'ai decidé de passer seulement ques des pointeurs en parametres a ces fonction, et la le programmme s'exécute sans probleme Mais il ne me fournis pas le resultat attendu:
Voici la premiere ligne de chaine de caratere que contien mon fichier : AB12Z
Malheuresement quand je tape AB12Z au clavier, la fonction me dit que les chaines de caracteres sont differentes pourtant elle affiche ces chaine de caracteres toutes deux identiques!
voici le code de la fonction qui reçoit la chaine de caractere en parametre puis la compare à celle qui est dans le fichier:
j'aimerais donc que vous maidez a ercire un programme qui compares une chaine de caracteres entrés au clavier à une autre qui est dans un fichier.
Merci
Je me je realise un petit programme qui compare un cahaine de caracteres a une autre qui se trouve dans un fichier.
pour la lecture dans le fichier jarrive a le faire sans probleme. Mais pendant l'execution, le fonction
strcmp()
et
strcat()
egendrent une erreur d'exécution , pourtant j'ai belle et bien mentionné le bibliotheque suivante :
#include<string.h>
Apres ça j'ai decidé de passer seulement ques des pointeurs en parametres a ces fonction, et la le programmme s'exécute sans probleme Mais il ne me fournis pas le resultat attendu:
Voici la premiere ligne de chaine de caratere que contien mon fichier : AB12Z
Malheuresement quand je tape AB12Z au clavier, la fonction me dit que les chaines de caracteres sont differentes pourtant elle affiche ces chaine de caracteres toutes deux identiques!
voici le code de la fonction qui reçoit la chaine de caractere en parametre puis la compare à celle qui est dans le fichier:
void IdentificationVotant( char *nomVote) { FILE * FichierVotant=NULL; const char chaineVotant[TAILLE]; char * ptr_ChainVotant =&chaineVotant; int ResComp=0; int Trouve =0; FichierVotant= fopen("Votant.txt","r"); if( FichierVotant!=NULL) { while( fgets(ptr_ChainVotant, TAILLE, FichierVotant)!=NULL) { printf(" voici : %s", chaineVotant); ResComp=strcmp(chaineVotant,nomVote); if (ResComp==0) { printf(" Les chaine de caracteres sont identiques"); } else { printf(" Les chaine de caracteres sont differentes"); } } } fclose(FichierVotant); }
j'aimerais donc que vous maidez a ercire un programme qui compares une chaine de caracteres entrés au clavier à une autre qui est dans un fichier.
Merci
A voir également:
- Requete dans un fichier en langage C
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
2 réponses
Bonjour,
du man de fgets on peut lire :
fgets() lit au plus size - 1 caractères depuis stream et les place dans le buffer pointé par s. La lecture s'arrête après EOF ou un retour-chariot. Si un retour-chariot (newline) est lu, il est placé dans le buffer. Un caractère nul '\0' est placé à la fin de la ligne.
En gros, notre ami fgets récupère le retour-chariot ( \n ) et le place en fin de chaine ( avant le \0 ) ce qui fait que dans un cas tu auras :
AB12Z\0
et dans l'autre
AB12Z\n\0
Les chaines sont effectivement différentes.
Pour palier au problème je te propose fscanf ( il y a sans doutes d'autre solutions ) :
du man de fgets on peut lire :
fgets() lit au plus size - 1 caractères depuis stream et les place dans le buffer pointé par s. La lecture s'arrête après EOF ou un retour-chariot. Si un retour-chariot (newline) est lu, il est placé dans le buffer. Un caractère nul '\0' est placé à la fin de la ligne.
En gros, notre ami fgets récupère le retour-chariot ( \n ) et le place en fin de chaine ( avant le \0 ) ce qui fait que dans un cas tu auras :
AB12Z\0
et dans l'autre
AB12Z\n\0
Les chaines sont effectivement différentes.
Pour palier au problème je te propose fscanf ( il y a sans doutes d'autre solutions ) :
void IdentificationVotant( char *nomVote){ FILE * FichierVotant=NULL; char chaineVotant[TAILLE]; int ResComp=0; FichierVotant= fopen("Votant.txt","r"); if( FichierVotant!=NULL){ while( fscanf(FichierVotant, "%s", chaineVotant)!=EOF){ printf(" voici : %s\n", chaineVotant); printf("%s\n", nomVote); ResComp=strcmp(chaineVotant,nomVote); printf("%d\n", ResComp); if (ResComp==0){ printf(" Les chaine de caracteres sont identiques\n"); } else{ printf(" Les chaine de caracteres sont differentes\n"); } } } fclose(FichierVotant); }