Requete dans un fichier en langage C

Fermé
basopro Messages postés 100 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 3 juin 2015 - 3 juin 2012 à 11:22
 Aoec - 4 juin 2012 à 10:29
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
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:

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 ) :
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);
}
2
Le Dodo Messages postés 1932 Date d'inscription jeudi 10 mars 2011 Statut Membre Dernière intervention 27 août 2013 244
3 juin 2012 à 11:26
if (chaine1 == chaine 2)
{
les chaines sont identiques
}else 
{
les chaines sont différentes
}


chaine 1 ce que tu as entré au clavier, et chaine 2 celle qui est dans le fichier

je crois que c'est ça mais j'en suis pas sûr...
-3