[C] Elle est où mon erreur ??????? j'en ai marre !

Elle est où mon erreur ??????? j'en ai marre ! [C] - Programmation

Marsh Posté le 19-03-2002 à 09:37:01    

Elle est ou mon erreur ??? je cherche mais là je comprends vraiment pas !  
 
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
main()
{
  FILE *fichier_entre ;
  FILE *fichier_sortie ;
  char choix[1] ;
  char chemin_entre[80] ;
  char chemin_sortie[80] ;
  char nom_club[80] ;
  char ligne_lu[80] ;
  char preposition[19]=(" possede le joueur " ) :
  char intermediaire[99] ;
  char club_et_joeur[179] ;
  int compteur_ligne=0 ;
 
 
  char[80] supprime_caractere(char chaine[80])
    {
      char separateurs={" &'(_$ù*!:;,.#{}|"};
      char traitement[80] ;
      char resultat[80]="" ;
      traitement = strtok(chaine, separateurs);
      while (traitement != NULL)
 {
   if (traitement != "" )
     {
       resultat=strcat(resultat, strcat(traitement," " ));
       traitement =  strtok(NULL, separateurs) ;
     }
 }
   return resultat ;
    }
 
 
  printf("\033[2J" ) ;
  printf("Nom du fichier d'entree (avec chemin d'entree) : " ) ;
  gets(chemin) ;
  while((fichier_entre=fopen(chemin_entre, "r" ))==NULL)  
    {
      printf("\nLe fichier n'existe pas.\nContinuer O/N ?" ) ;
      gets(choix) ;
      if (choix=="O"||"o" )
 {
   printf("\nVeuillez entre un autre nom de fichier : " ) ;
   chemin_entre="" ;
   gets(chemin_entre) ;
 }
      else
 exit ;
     }
 
  printf("\033[2J" ) ;
  printf("Nom du fichier de sortie (avec chemin d'entree) : " ) ;
  gets(chemin) ;
  while((fichier_sortie=fopen(chemin_sortie, "r" ))==NULL)  
    {
      printf("\nLe fichier existe deja.\nQuitter O/N ?" ) ;
      gets(choix) ;
      if (choix=="O"||"o" )
 {
   printf("\nVeuillez entre un autre nom de fichier :" ) ;
   chemin_sortie="" ;
   gets(chemin_sortie) ;
 }
      else
 exit ;
    }
 
 
  while((fgets(ligne_lu,80, fichier_entre)) != EOF)
    {
      if (strcmp(ligne_lu,"\n" ) == 0)
 {
   if ((compteur_ligne %3) ==0)
     {
       printf("\nNom du club absent, enregistrement ignore" );
       fgets(ligne_ly,80,fichier_entre);
     }
   else
     printf("\nNom du joueur absent, enregistrement ignore" ) ;
   compteur_ligne++;
 }
      else
 ligne_traiter= supprime_caractere(ligne_lu);
 {
   if ((compteur_ligne % 2)==0)
     {
       if (strlen(ligne_traiter)==1)
  {
    printf("\nUn nom de club avec un seul caractere ?\nT'as fume ou quoi ?\nEnregistrement
ignore." );
    fgets(ligne_lu,80,fichier_entre) ;
  }
       else
  nom_club = ligne_traiter ;
     }
   else
     {
       if (strlen(ligne_traiter) !=1)
  {
    intermediaire = strcat(nom_club, preposition) ;
    club_et_joueur = strcat(intermediaire, ligne_traiter) ;
    fputs(club_et_joueur, fichier_sortie) ;
  }
       else
  printf("\nUn nom de joueur avec un seul caractere ?\nTu t'es vu quand t'as bu
?\nEnregistrement ignore." ) ;
     }
   compteur_ligne++ ;
 }
    }
 
  printf("\033[2J" ) ;
  printf("Traitement termine" );
}


---------------

Reply

Marsh Posté le 19-03-2002 à 09:37:01   

Reply

Marsh Posté le 19-03-2002 à 09:42:05    

voilà les erreurs :  
 
".
cc: "concact.c", line 39: error 1000: Unexpected symbol: "Nom du fichier d'entree (avec
chemin d'entree) : ".
cc: "concact.c", line 41: error 1000: Unexpected symbol: "while".
cc: "concact.c", line 41: error 1000: Unexpected symbol: "=".
cc: "concact.c", line 41: error 1000: Unexpected symbol: " )".
cc: "concact.c", line 41: error 1000: Unexpected symbol: " )".
cc: "concact.c", line 43: error 1000: Unexpected symbol: ";".
cc: "concact.c", line 38: error 1506: Parameters allowed in function definition only.
cc: "concact.c", line 39: error 1506: Parameters allowed in function definition only.
cc: "concact.c", line 40: error 1506: Parameters allowed in function definition only.
cc: "concact.c", line 40: error 1584: Inconsistent type declaration: "gets".
cc: "concact.c", line 45: error 1000: Unexpected symbol: "if".
cc: "concact.c", line 45: error 1000: Unexpected symbol: "==".
cc: "concact.c", line 46: error 1000: Unexpected symbol: "{".
cc: "concact.c", line 47: error 1000: Unexpected symbol: ";".
cc: "concact.c", line 44: error 1506: Parameters allowed in function definition only.
cc: "concact.c", line 44: error 1584: Inconsistent type declaration: "gets".
cc: "concact.c", line 50: error 1000: Unexpected symbol: "}".
cc: "concact.c", line 53: error 1000: Unexpected symbol: "}".
cc: "concact.c", line 55: error 1000: Unexpected symbol: ";".
cc: "concact.c", line 56: error 1000: Unexpected symbol: ";".
cc: "concact.c", line 48: warning 502: Initializer for int type is string.
cc: "concact.c", line 49: error 1506: Parameters allowed in function definition only.
cc: "concact.c", line 49: error 1584: Inconsistent type declaration: "gets".
cc: "concact.c", line 52: error 1573: Type of "exit" is undefined due to an illegal
declaration.
cc: "concact.c", line 52: error 1584: Inconsistent type declaration: "exit".
cc: "concact.c", line 58: error 1000: Unexpected symbol: "while".
cc: "concact.c", line 58: error 1000: Unexpected symbol: "=".
cc: "concact.c", line 58: error 1000: Unexpected symbol: " )".
cc: "concact.c", line 58: error 1000: Unexpected symbol: " )".
cc: "concact.c", line 60: error 1000: Unexpected symbol: ";".
cc: "concact.c", line 57: error 1506: Parameters allowed in function definition only.
cc: "concact.c", line 57: error 1584: Inconsistent type declaration: "gets".
cc: "concact.c", line 62: error 1000: Unexpected symbol: "if".
cc: "concact.c", line 62: error 1000: Unexpected symbol: "==".
cc: "concact.c", line 63: error 1000: Unexpected symbol: "{".
cc: "concact.c", line 64: error 1000: Unexpected symbol: ";".
cc: "concact.c", line 61: error 1506: Parameters allowed in function definition only.
cc: "concact.c", line 61: error 1584: Inconsistent type declaration: "gets".
cc: "concact.c", line 67: error 1000: Unexpected symbol: "}".
cc: "concact.c", line 70: error 1000: Unexpected symbol: "}".
cc: "concact.c", line 73: error 1000: Unexpected symbol: "80".
cc: "concact.c", line 73: error 1000: Unexpected symbol: "!=".
cc: "concact.c", line 79: error 1000: Unexpected symbol: ";".
cc: "concact.c", line 80: error 1000: Unexpected symbol: ";".
cc: "concact.c", line 65: warning 502: Initializer for int type is string.
cc: "concact.c", line 66: error 1506: Parameters allowed in function definition only.
cc: "concact.c", line 66: error 1584: Inconsistent type declaration: "gets".
cc: "concact.c", line 69: error 1573: Type of "exit" is undefined due to an illegal
declaration.
cc: "concact.c", line 69: warning 525: Redeclaration of identifier "exit".
cc: "concact.c", line 73: error 1584: Inconsistent type declaration: "fgets".
cc: "concact.c", line 77: error 1588: "compteur_ligne" undefined.
cc: "concact.c", line 77: error 1563: Expression in if must be scalar.
cc: "concact.c", line 84: error 1560: Modifiable lvalue required with operator "++".
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                                           ".
cc: "concact.c", line 115: error 1000: Unexpected symbol: "Traitement termine".
cc: "concact.c", line 116: error 1000: Unexpected symbol: "}".
cc: "concact.c", line 114: error 1506: Parameters allowed in function definition only.
cc: "concact.c", line 115: error 1506: Parameters allowed in function definition only.
kartxila_$ cc: "concact.c", line 39: error 1000: Unexpected symbol: "Nom du fichier
d'entree (avec chemin d'entree) : ".
bash: cc:: command not found
kartxila_$ cc: "concact.c", line 41: error 1000: Unexpected symbol: "while".
cc: "concact.c", line 38: error 15bash: cc:: command not found
kartxila_$ cc: "concact.c", line 41: error 1000: Unexpected symbol: "=".
bash: cc:: command not found
kartxila_$ cc: "concact.c", line 41: error 1000: Unexpected symbol: " )".
bash: cc:: command not found
kartxila_$ cc: "concact.c", line 41: error 1000: Unexpected symbol: " )".
bash: cc:: command not found
kartxila_$ cc: "concact.c", line 43: error 1000: Unexpected symbol: ";".
bash: cc:: command not found
kartxila_$ cc: "concact.c", line 38: error 15


---------------

Reply

Marsh Posté le 19-03-2002 à 09:42:28    

Tu pourais déjà dire ce qui déconne en gros, ça éviterait de partir en aveugle. Déjà, char choix[1] c'est quoi l'utilité ? ensuite méfies toi, dans un char[19] on ne peut mettre que 18 caractères.


---------------
"Si ça peut déconner, ça va déconner..."
Reply

Marsh Posté le 19-03-2002 à 09:45:42    

damned, j'ai rien dit.


---------------
"Si ça peut déconner, ça va déconner..."
Reply

Marsh Posté le 19-03-2002 à 09:52:58    

bon j'ai corriger char [19] en mettant char [20] mais bon tjrs autant d'erreur


---------------

Reply

Marsh Posté le 19-03-2002 à 10:42:05    

Petite Quetsion, tu compiles avec quoi car moi j'ai compilé avec VC++ et je n'ai pas autant d'erreur et surtout pas les memes


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 19-03-2002 à 10:45:49    

Bon petite chose, pourquoi definir la fonction dans le corps du main ( pour moi c'est pas clair). En plus une fonction ne peut renvoyer un tableau,  pour cela il faut passer par les pointeurs.

 

[jfdsdjhfuetppo]--Message édité par lord ii--[/jfdsdjhfuetppo]


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 19-03-2002 à 10:46:45    

Encore une chose, la focntion exit prend un parametre et en plus tu as la definition du tableau preposition qui se finit par ":" et je crois que les parenthèses ne sont pas obligatoires

 

[jfdsdjhfuetppo]--Message édité par lord ii--[/jfdsdjhfuetppo]


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 19-03-2002 à 10:56:29    

Houlà !!!
 
Y'a du boulot !!!
Tu confonds chaines de caractères et pointeurs de caractères !!!
Tu compares un pointeur avec une chaîne (if (traitement!="" ) !!!), etc...
Bon, j'ai déjà bien réduit le nombre d'erreurs, mais une question : ligne je sais pas combien tu fait fgets(chemin)... moui, mais tu n'as pas défini "chemin". A quelle chaîne voulais tu faire référence ???


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-03-2002 à 10:57:48    

Ensuite dans la fonction supprime_caractères, la declarion de separateur n'est pas valide, c'est :
 
char separateurs[]={" &'(_$ù*!:;,.#{}|"};  
 
 
Une autre chose, en c/c++ il faut declarer toutes les variables sinon ca ne marche pas, par ex :
 
char chemin[1000];
gets(chemin);
 
Si tu veux mettre une chaine de caractères en tant que chaine vide je te conseille strset(chaine,'\0';); c'est mieux et ca marche contrairement à chaine="";


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 19-03-2002 à 10:57:48   

Reply

Marsh Posté le 19-03-2002 à 10:59:00    

zi_ril_wanou a écrit a écrit :

Houlà !!!
 
Bon, j'ai déjà bien réduit le nombre d'erreurs,  




 
 
Combien il t'en restes ,moi une demi-douzaine mais je peses que dans deux minutes c'est torché


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 19-03-2002 à 11:07:37    

Bon moi je n'ai plus que des warnings donc j'ai fini.
 
Je te conseille de bien lire la doc de chaque fonction car (par ex)
 
strcat renvoie un pointeur sur la chaine dest et prend deux parametres
 
definition de strcat:
 
char *strcat( char *strDestination, const char *strSource );
 
donc, la valeur de retour tu t'en fous puisque c'est deja le premier parametres concatené avec le deuxieme.
 
Donc cette sequence :
 
intermediaire = strcat(nom_club, preposition) ;  
   club_et_joueur = strcat(intermediaire, ligne_traiter) ;  
   fputs(club_et_joueur, fichier_sortie) ;  
 
 
devient :
 
   strcat(intermediaire,preposition) ;
   strcat(intermediaire,nom_club);
   strcat(intermediaire, ligne_traiter) ;
   fputs(intermediaire, fichier_sortie) ;
 
 
Voilà avec toutes ces pistes tu devrais arriver à t'en sortir


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 19-03-2002 à 11:10:32    

Ayé !!!
 
#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
 
main()  
{  
  FILE *fichier_entre ;  
  FILE *fichier_sortie ;  
  char choix[1] ;  
  char chemin_entre[80] ;  
  char chemin_sortie[80] ;  
  char nom_club[80] ;  
  char ligne_lu[80] ;  
  char *ligne_traiter;
  char preposition[19]=(" possede le joueur " ) ;  
  char intermediaire[99] ;  
  char club_et_joueur[179] ;  
  int compteur_ligne=0 ;  
   
   
  char *supprime_caractere(char chaine[80])  
    {  
      char separateurs[20]={" &'(_$ù*!:;,.#{}|"};  
      char *traitement ;  
      char *resultat;  
      traitement = strtok(chaine, separateurs);
      resultat = (char *)calloc(80,sizeof(char));  
      resultat[0]='\000';
      while (traitement != NULL)  
 {  
   if (traitement[0]!='\000';)  
     {  
       resultat=strcat(resultat, strcat(traitement," " ));  
       traitement =  strtok(NULL, separateurs) ;  
     }  
 }  
      return resultat ;  
    }  
   
   
  printf("\033[2J" ) ;  
  printf("Nom du fichier d'entree (avec chemin d'entree) : " ) ;  
  gets(chemin_entre) ;  
  while((fichier_entre=fopen(chemin_entre, "r" ))==NULL)  
    {  
      printf("\nLe fichier n'existe pas.\nContinuer O/N ?" ) ;  
      gets(choix) ;  
      if (choix=="O"||"o" )  
 {  
   printf("\nVeuillez entre un autre nom de fichier : " ) ;  
   gets(chemin_entre) ;  
 }  
      else  
 exit ;  
    }  
   
  printf("\033[2J" ) ;  
  printf("Nom du fichier de sortie (avec chemin d'entree) : " ) ;  
  gets(chemin_sortie) ;  
  while((fichier_sortie=fopen(chemin_sortie, "r" ))==NULL)  
    {  
      printf("\nLe fichier existe deja.\nQuitter O/N ?" ) ;  
      gets(choix) ;  
      if (choix=="O"||"o" )  
 {  
   printf("\nVeuillez entre un autre nom de fichier :" ) ;  
   gets(chemin_sortie) ;  
 }  
      else  
 exit ;  
    }  
   
   
  while((fgets(ligne_lu,80, fichier_entre)) != NULL)  
    {  
      if (strcmp(ligne_lu,"\n" ) == 0)  
 {  
   if ((compteur_ligne %3) ==0)  
     {  
       printf("\nNom du club absent, enregistrement ignore" );  
       fgets(ligne_lu,80,fichier_entre);  
     }  
   else  
     printf("\nNom du joueur absent, enregistrement ignore" ) ;  
   compteur_ligne++;  
 }  
      else  
 ligne_traiter= supprime_caractere(ligne_lu);  
      {  
 if ((compteur_ligne % 2)==0)  
   {  
     if (strlen(ligne_traiter)==1)  
       {  
  printf("\nUn nom de club avec un seul caractere ?\nT'as fume ou quoi ?\nEnregistrement ignore." );  
  fgets(ligne_lu,80,fichier_entre) ;  
       }  
     else  
       strcpy(nom_club,ligne_traiter) ;  
   }  
 else  
   {  
     if (strlen(ligne_traiter) !=1)  
       {  
  strcpy(intermediaire,preposition);
  strcat(intermediaire,nom_club);
  strcpy(club_et_joueur,intermediaire);
  strcat(club_et_joueur,ligne_traiter);
  fputs(club_et_joueur, fichier_sortie) ;  
       }  
     else  
       printf("\nUn nom de joueur avec un seul caractere ?\nTu t'es vu quand t'as bu ?\nEnregistrement ignore." ) ;  
   }  
 compteur_ligne++ ;  
      }  
    }  
   
  printf("\033[2J" ) ;  
  printf("Traitement termine" );  
}


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-03-2002 à 11:13:46    

Voici ma version ( non indenté comme il faut et je n'ai pas vu non plus si le prog fait ce qui doit faire étant donné que je ne sais pas ce qu'il doit faire.
 
 
Le code
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
 
void supprime_caractere(char *chaine,char *resultat)
   {
     char separateurs[]={" &'(_$ù*!:;,.#{}|"};
     char *traitement ;
     
  traitement = strtok(chaine, separateurs);
     while (traitement != NULL)
  {
    if (strcmp(traitement,"" ) != 0)
   {
     strcat(resultat, strcat(traitement," " ));
     traitement =  strtok(NULL, separateurs) ;
   }
  }
 //return resultat ;
   }
 
 
int main()
{
 FILE *fichier_entre ;
 FILE *fichier_sortie ;
 
 char chemin[1000]="";
 
 char choix[1]="" ;
 char chemin_entre[80]="";
 char chemin_sortie[80]="" ;
 char nom_club[80]="";
 char ligne_lu[80]="";
 char ligne_traiter[80]="";
 
 char preposition[20]=(" possede le joueur " ) ;
 char intermediaire[1000]="";
 int compteur_ligne=0 ;
 
 
 printf("\033[2J" ) ;
 printf("Nom du fichier d'entree (avec chemin d'entree) : " ) ;
 gets(chemin) ;
 while((fichier_entre=fopen(chemin_entre, "r" ))==NULL)  
   {
     printf("\nLe fichier n'existe pas.\nContinuer O/N ?" ) ;
     gets(choix) ;
     if (choix=="O"||"o" )
  {
    printf("\nVeuillez entre un autre nom de fichier : " ) ;
    strset(chemin_entre,'\0';);
    gets(chemin_entre) ;
  }
  else
  exit(1) ;
 }
 
 printf("\033[2J" ) ;
 printf("Nom du fichier de sortie (avec chemin d'entree) : " ) ;
 gets(chemin) ;
 while((fichier_sortie=fopen(chemin_sortie, "r" ))==NULL)  
   {
     printf("\nLe fichier existe deja.\nQuitter O/N ?" ) ;
     gets(choix) ;
     if (choix=="O"||"o" )
{
  printf("\nVeuillez entre un autre nom de fichier :" ) ;
  strset(chemin_sortie,'\0';);
  gets(chemin_sortie) ;
}
     else
exit(1) ;
   }
 
 
while( feof(fichier_entre) != EOF)
 {
  fgets(ligne_lu,80, fichier_entre);
  if (strcmp(ligne_lu,"\n" ) == 0)
  {
   if ((compteur_ligne %3) ==0)
   {
    printf("\nNom du club absent, enregistrement ignore" );
    fgets(ligne_lu,80,fichier_entre);
   }
   else
    printf("\nNom du joueur absent, enregistrement ignore" ) ;
   compteur_ligne++;
  }
  else
   supprime_caractere(ligne_lu,ligne_traiter);
  {
  if ((compteur_ligne % 2)==0)
  {
   if (strlen(ligne_traiter)==1)
   {
    printf("\nUn nom de club avec un seul caractere ?\nT'as fume ou quoi ?\nEnregistrement ignore." );
    fgets(ligne_lu,80,fichier_entre) ;
   }
   else
    strcpy(nom_club,ligne_traiter) ;
  }
  else
   {
   if (strlen(ligne_traiter) !=1)
    {
    strcat(intermediaire,preposition) ;
    strcat(intermediaire,nom_club);
    strcat(intermediaire, ligne_traiter) ;
    fputs(intermediaire, fichier_sortie) ;
    }
   else
    printf("\nUn nom de joueur avec un seul caractere ?\nTu t'es vu quand t'as bu ?\nEnregistrement ignore." ) ;
   }
  compteur_ligne++ ;
  }
 }
 
 printf("\033[2J" ) ;
 printf("Traitement termine" );
 return 0;
}

 

[jfdsdjhfuetppo]--Message édité par lord ii--[/jfdsdjhfuetppo]


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 19-03-2002 à 11:18:34    

Ma solution est vraiment trop dégeu !!!
 
(Ca compile mais ça marche pô)
 
Voilou plus propre :
 
#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
 
main()  
{  
  FILE *fichier_entre ;  
  FILE *fichier_sortie ;  
  char choix ;  
  char chemin_entre[80] ;  
  char chemin_sortie[80] ;  
  char nom_club[80] ;  
  char ligne_lu[80] ;  
  char *ligne_traiter;
  char preposition[19]=(" possede le joueur " ) ;  
  char intermediaire[99] ;  
  char club_et_joueur[179] ;  
  int compteur_ligne=0 ;  
   
   
  char *supprime_caractere(char chaine[80])  
    {  
      char separateurs[20]={" &'(_$ù*!:;,.#{}|"};  
      char *traitement ;  
      char *resultat;  
      traitement = strtok(chaine, separateurs);
      resultat = (char *)calloc(80,sizeof(char));  
      resultat[0]='\000';
      while (traitement != NULL)  
 {  
   if (traitement[0]!='\000';)  
     {  
       resultat=strcat(resultat, strcat(traitement," " ));  
       traitement =  strtok(NULL, separateurs) ;  
     }  
 }  
      return resultat ;  
    }  
   
   
  printf("\033[2J" ) ;  
  scanf("Nom du fichier d'entree (avec chemin d'entree) : %s",chemin_entre) ;  
  while((fichier_entre=fopen(chemin_entre, "r" ))==NULL)  
    {  
      scanf("\nLe fichier n'existe pas.\nContinuer O/N ? %c ",&choix) ;  
      if (choix=='O' || choix=='o';)  
 {  
   scanf("\nVeuillez entre un autre nom de fichier : %s",chemin_entre) ;  
 }  
      else  
 exit ;  
    }  
   
  printf("\033[2J" ) ;  
  scanf("Nom du fichier de sortie (avec chemin d'entree) : %s",chemin_sortie) ;  
  while((fichier_sortie=fopen(chemin_sortie, "r" ))==NULL)  
    {  
      scanf("\nLe fichier existe deja.\nQuitter O/N ? %c",&choix) ;  
      if (choix=='O' || choix =='o';)  
 {  
   scanf("\nVeuillez entre un autre nom de fichier : %s",chemin_sortie) ;  
 }  
      else  
 exit ;  
    }  
   
   
  while((fgets(ligne_lu,80, fichier_entre)) != NULL)  
    {  
      if (strcmp(ligne_lu,"\n" ) == 0)  
 {  
   if ((compteur_ligne %3) ==0)  
     {  
       printf("\nNom du club absent, enregistrement ignore" );  
       fgets(ligne_lu,80,fichier_entre);  
     }  
   else  
     printf("\nNom du joueur absent, enregistrement ignore" ) ;  
   compteur_ligne++;  
 }  
      else  
 ligne_traiter= supprime_caractere(ligne_lu);  
      {  
 if ((compteur_ligne % 2)==0)  
   {  
     if (strlen(ligne_traiter)==1)  
       {  
  printf("\nUn nom de club avec un seul caractere ?\nT'as fume ou quoi ?\nEnregistrement ignore." );  
  fgets(ligne_lu,80,fichier_entre) ;  
       }  
     else  
       strcpy(nom_club,ligne_traiter) ;  
   }  
 else  
   {  
     if (strlen(ligne_traiter) !=1)  
       {  
  strcpy(intermediaire,preposition);
  strcat(intermediaire,nom_club);
  strcpy(club_et_joueur,intermediaire);
  strcat(club_et_joueur,ligne_traiter);
  fputs(club_et_joueur, fichier_sortie) ;  
       }  
     else  
       printf("\nUn nom de joueur avec un seul caractere ?\nTu t'es vu quand t'as bu ?\nEnregistrement ignore." ) ;  
   }  
 compteur_ligne++ ;  
      }  
    }  
   
  printf("\033[2J" ) ;  
  printf("Traitement termine" );  
}


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-03-2002 à 13:18:08    

j'ai lu attentivement ce que vous avez dit et je crois bien que j'ais fait de très nombreuses erreurs de sens. Maintenant je comprends beaucoup mieux et je vais bien relire et refaire le prog. En tout cas merci pour tout !
au fait j'utilise cc sous unix pour compiler. (on m'a posé la question c pour ça).


---------------

Reply

Marsh Posté le 20-03-2002 à 08:53:40    

ça compile et ça s'exécute en partie bien. mais bon le résultat est faux. J'ai un fichier essaie.txt qui contient :
Brest
Lerand
Paris
Ronaldinio
 
et je devrais obtenir
Brest possede le joueur Leran
Paris possede le joueur Ronaldinio
 
or j'obtiens :
 
Brest
  possede le joueur Brest
 Lerand
 Brest
 Lerand
 Paris
  possede le joueur Brest
 Lerand
 Paris
 Ronaldo  
 
Je me demande si ça viendra pas d'un problème d'un saut de ligne dans une chaîne de caractère. en plus quand on fait strcat(s1,s2) et si s1 possède un saut de ligne à la fin ça risque de déconner non ?  
 
---------------------------------------------------------------
 
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
void supprime_caractere(char *chaine,char *resultat)
  {
    char separateurs[]={" &'(_$*!:;,.#{}|\0\n"};
    char *traitement ;
     
    traitement = strtok(chaine, separateurs);
    while (traitement != NULL)
     {
       if (strcmp(traitement,"\0" ) != 0)
     {
       strcat(resultat, strcat(traitement," " ));
       traitement =  strtok(NULL, separateurs) ;
    }
   }
 //return resultat ;
  }
 
int main()
{
 
FILE *fichier_entre ;
FILE *fichier_sortie ;
char choix[1]="\0" ;
char chemin_entre[80]="\0";
char chemin_sortie[80]="\0" ;
char nom_club[80]="\0";
char ligne_lu[80]="\0";
char ligne_traiter[80]="\0";
char preposition[20]=(" possede le joueur " ) ;
char intermediaire[200]="\0";
int compteur_ligne=0 ;
 
 
printf("Nom du fichier d'entree (avec chemin d'entree) : " ) ;
gets(chemin_entre) ;
while(!(fichier_entre=fopen(chemin_entre, "r" )))
  {
    printf("\nLe fichier n'existe pas.\nContinuer O/N ?" ) ;
    gets(choix) ;
    if (choix =="O"|| "o" )
     {
       printf("\nVeuillez entre un autre nom de fichier : " ) ;
       strset(chemin_entre,'\0';); /* on vide le chemin d'entree */
       gets(chemin_entre) ;
     }
    else
       exit(1) ;
  }
 
printf("Nom du fichier de sortie (avec chemin d'entree) : " ) ;
gets(chemin_sortie) ;
while(!(fichier_sortie=fopen(chemin_sortie, "w" )))
  {
    printf("\nLe fichier existe deja.\nQuitter O/N ?" ) ;
    gets(choix) ;
    if (choix=="O"|| "o" )
     {
       printf("\nVeuillez entre un autre nom de fichier :" ) ;
       strset(chemin_sortie,'\0';);
       gets(chemin_sortie) ; /* on vide le chemin de sortie */
     }
    else
       exit(1) ;
  }
 
 
while(!feof(fichier_entre))
  {
    fgets(ligne_lu,80, fichier_entre);
    if (strcmp(ligne_lu,"\n" ) == 0)
     {
       if ((compteur_ligne %2) ==0)
        {
          printf("\nNom du club absent, enregistrement ignore" );
          fgets(ligne_lu,80,fichier_entre);
        }
       else
          printf("\nNom du joueur absent, enregistrement ignore" ) ;
       compteur_ligne++;
     }
    else
       supprime_caractere(ligne_lu,ligne_traiter);
    if ((compteur_ligne % 2)==0)
     {
       if (strlen(ligne_traiter)==1)
        {
          fgets(ligne_lu,80,fichier_entre) ;
          fputs("Enregistrement ignore : Le club ne peut posseder qu'un seul caractere.", fichier_sortie);
        }
       else
          strcpy(nom_club,ligne_traiter) ;
      }
    else
     {
       if (strlen(ligne_traiter) !=1)
        {
          strcat(nom_club,preposition) ;
          strcat(nom_club, ligne_traiter);
          fputs(nom_club, fichier_sortie) ;
        }
       else
          fputs("Enregistrement ignore : Le joueur ne peut posseder qu'un seul caractere.", fichier_sortie);
     }
    compteur_ligne++ ;
  }
 
fclose(fichier_entre) ;
fclose(fichier_sortie) ;
printf("Traitement termine" );
return 0;
}


---------------

Reply

Marsh Posté le 20-03-2002 à 09:51:12    

J'ai trouvé et c'était facile, tout simplement tu oublie de vider le buffer ligne_traiter après chaque parcours de la boucle.
 
Un simple appel  
 
strset(ligne_traiter,'\0';);  
 
après compteur++ résoudra le probleme. EN fait ce qui se passe c'est que le buffer contient toujours là première chaine et ainsi de suite.....


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 20-03-2002 à 09:57:48    

Attention ta fonction en supprime pas les retours chariots qui sont présent dans la chaine retourné par fgets.
 
Une petite modification de la focntion est à prévoir surtout dans la définition de la chaine .
 
PS :  Rappel le caractère \0 représenet la fin de la chaine de caractère

 

[jfdsdjhfuetppo]--Message édité par lord ii--[/jfdsdjhfuetppo]


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 20-03-2002 à 10:06:53    

Un autre petite chose. Est tu vraiment sur que tu as besoin de deux variables pour la saisie des chemin. Je pense qu'une seule variable buffer[1000] ( un peu plus grose d'ailleurs) serait suffissant étant donné que c'est dexu variables ne se "rencontrent" jamais.
 
Je pense aussi que cela doit etre possible de supprimer la varibale choix et de la remplacer par le buffer cité précédemment.
 
Attention également à la taille de nom_club qui est une peu petite si jamais on fait le total de ce que tu peux y mettre. Je te conseille egalement ici de passer par le buffer mais en conservant toutes les autres variable

 

[jfdsdjhfuetppo]--Message édité par lord ii--[/jfdsdjhfuetppo]


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 20-03-2002 à 18:41:53    

ça s'améliore grandement mais il y a toujours un problème avec un saut de ligne ! la je cromprends pas du tout !
avec le fichier texte essaie.txt : (copier-coller)
Brest
Lerand
Paris
Ronaldo
j'obtiens : (copier-coller).
Brest
  possede le joueur Lerand
 Paris
  possede le joueur Ronaldo  
 
----------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
void supprime_caractere(char *chaine,char *resultat)
  {
    char separateurs[17]={" &'(_$*!:;,.#{}|"};
    char *traitement ;
    int parcours_boucle = 0 ;
     
    traitement = strtok(chaine, separateurs);
    while (traitement != NULL)
     {
       if (strcmp(traitement,"\0" ) != 0)
     {
       strcat(resultat, strcat(traitement," " ));
       traitement =  strtok(NULL, separateurs) ;
          if (resultat[strlen (resultat) + 1]=='\n';)
           resultat[strlen (resultat) + 1]='\0' ;
    }
   }
 //return resultat ;
  }
 
int main()
{
 
FILE *fichier_entre ;
FILE *fichier_sortie ;
char choix[1]="\0" ;
char chemin_entre[80]="\0";
char chemin_sortie[80]="\0" ;
char nom_club[80]="\0";
char nom[80]="\0" ;
char ligne_lu[80]="\0";
char ligne_traiter[80]="\0";
char preposition[20]=(" possede le joueur " ) ;
char intermediaire[200]="\0";
int compteur_ligne=0 ;
 
 
printf("Nom du fichier d'entree (avec chemin d'entree) : " ) ;
gets(chemin_entre) ;
while(!(fichier_entre=fopen(chemin_entre, "r" )))
  {
    printf("\nLe fichier n'existe pas.\nContinuer O/N ?" ) ;
    gets(choix) ;
    if (choix =="O"|| "o" )
     {
       printf("\nVeuillez entre un autre nom de fichier : " ) ;
       strset(chemin_entre,'\0';); /* on vide le chemin d'entree */
       gets(chemin_entre) ;
     }
    else
       exit(1) ;
  }
 
printf("Nom du fichier de sortie (avec chemin d'entree) : " ) ;
gets(chemin_sortie) ;
while(!(fichier_sortie=fopen(chemin_sortie, "w" )))
  {
    printf("\nLe fichier existe deja.\nQuitter O/N ?" ) ;
    gets(choix) ;
    if (choix=="O"|| "o" )
     {
       printf("\nVeuillez entre un autre nom de fichier :" ) ;
       strset(chemin_sortie,'\0';);
       gets(chemin_sortie) ; /* on vide le chemin de sortie */
     }
    else
       exit(1) ;
  }
 
 
while(!feof(fichier_entre))
  {
    strset(ligne_lu,'\0';);
    strset(ligne_traiter,'\0';) ;
    fgets(ligne_lu,80, fichier_entre);
    supprime_caractere(ligne_lu,ligne_traiter);
    if (strcmp(ligne_lu,"\n" ) == 0)
     {
       if ((compteur_ligne %2) ==0)
        {
          printf("\nNom du club absent, enregistrement ignore" );
          fgets(ligne_lu,80,fichier_entre);
        }
       else
          printf("\nNom du joueur absent, enregistrement ignore" ) ;
       compteur_ligne++;
     }
    else
     {
       if ((compteur_ligne % 2)==0)
        {
          if (strlen(ligne_traiter)==1)
           {
             fgets(ligne_lu,80,fichier_entre) ;
             fputs("Enregistrement ignore : Le club ne peut posseder qu'un seul caractere.", fichier_sortie);
           }
          else
             strcpy(nom_club,ligne_traiter) ;
         }
       else
        {
          if (strlen(ligne_traiter) !=1)
           {
             strcat(nom_club, preposition) ;
             strcat(nom_club, ligne_traiter) ;
             fputs(nom_club, fichier_sortie) ;
           }
          else
             fputs("Enregistrement ignore : Le joueur ne peut posseder qu'un seul caractere.", fichier_sortie);
        }
      compteur_ligne++ ;
     }
  }
 
fclose(fichier_entre) ;
fclose(fichier_sortie) ;
printf("Traitement termine" );
return 0;
}


---------------

Reply

Marsh Posté le 21-03-2002 à 17:21:14    

LordAnkou a écrit a écrit :

ça s'améliore grandement mais il y a toujours un problème avec un saut de ligne ! la je cromprends pas du tout !
avec le fichier texte essaie.txt : (copier-coller)
Brest
Lerand
Paris
Ronaldo
j'obtiens : (copier-coller).
Brest
  possede le joueur Lerand
 Paris
  possede le joueur Ronaldo  
 
----------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
void supprime_caractere(char *chaine,char *resultat)
  {
    char separateurs[17]={" &'(_$*!:;,.#{}|"};
    char *traitement ;
    int parcours_boucle = 0 ;
     
    traitement = strtok(chaine, separateurs);
    while (traitement != NULL)
     {
       if (strcmp(traitement,"\0" ) != 0)
     {
       strcat(resultat, strcat(traitement," " ));
       traitement =  strtok(NULL, separateurs) ;
          if (resultat[strlen (resultat) + 1]=='\n';)
           resultat[strlen (resultat) + 1]='\0' ;
    }
   }
 //return resultat ;
  }
 
int main()
{
 
FILE *fichier_entre ;
FILE *fichier_sortie ;
char choix[1]="\0" ;
char chemin_entre[80]="\0";
char chemin_sortie[80]="\0" ;
char nom_club[80]="\0";
char nom[80]="\0" ;
char ligne_lu[80]="\0";
char ligne_traiter[80]="\0";
char preposition[20]=(" possede le joueur " ) ;
char intermediaire[200]="\0";
int compteur_ligne=0 ;
 
 
printf("Nom du fichier d'entree (avec chemin d'entree) : " ) ;
gets(chemin_entre) ;
while(!(fichier_entre=fopen(chemin_entre, "r" )))
  {
    printf("\nLe fichier n'existe pas.\nContinuer O/N ?" ) ;
    gets(choix) ;
    if (choix =="O"|| "o" )
     {
       printf("\nVeuillez entre un autre nom de fichier : " ) ;
       strset(chemin_entre,'\0';); /* on vide le chemin d'entree */
       gets(chemin_entre) ;
     }
    else
       exit(1) ;
  }
 
printf("Nom du fichier de sortie (avec chemin d'entree) : " ) ;
gets(chemin_sortie) ;
while(!(fichier_sortie=fopen(chemin_sortie, "w" )))
  {
    printf("\nLe fichier existe deja.\nQuitter O/N ?" ) ;
    gets(choix) ;
    if (choix=="O"|| "o" )
     {
       printf("\nVeuillez entre un autre nom de fichier :" ) ;
       strset(chemin_sortie,'\0';);
       gets(chemin_sortie) ; /* on vide le chemin de sortie */
     }
    else
       exit(1) ;
  }
 
 
while(!feof(fichier_entre))
  {
    strset(ligne_lu,'\0';);
    strset(ligne_traiter,'\0';) ;
    fgets(ligne_lu,80, fichier_entre);
    supprime_caractere(ligne_lu,ligne_traiter);
    if (strcmp(ligne_lu,"\n" ) == 0)
     {
       if ((compteur_ligne %2) ==0)
        {
          printf("\nNom du club absent, enregistrement ignore" );
          fgets(ligne_lu,80,fichier_entre);
        }
       else
          printf("\nNom du joueur absent, enregistrement ignore" ) ;
       compteur_ligne++;
     }
    else
     {
       if ((compteur_ligne % 2)==0)
        {
          if (strlen(ligne_traiter)==1)
           {
             fgets(ligne_lu,80,fichier_entre) ;
             fputs("Enregistrement ignore : Le club ne peut posseder qu'un seul caractere.", fichier_sortie);
           }
          else
            strcpy(nom_club,ligne_traiter) ;
         }
       else
        {
          if (strlen(ligne_traiter) !=1)
           {
             strcat(nom_club, preposition) ;
             strcat(nom_club, ligne_traiter) ;
             fputs(nom_club, fichier_sortie) ;
           }
          else
             fputs("Enregistrement ignore : Le joueur ne peut posseder qu'un seul caractere.", fichier_sortie);
        }
      compteur_ligne++ ;
     }
  }
 
fclose(fichier_entre) ;
fclose(fichier_sortie) ;
printf("Traitement termine" );
return 0;
}  




 
Ton problème vient de l'usage de fgets qui prend en compte y compris les retour chariots.
 
Rajoute après la ligne en gras : nom_club[strlen(nom_club)-1]='\000' .
Tu remplaces ainsi le caractère retour chariot pas le caractère fin de chaîne. Ca devrait marcher.


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed