Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1056 connectés 

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°113968
lordankou
Posté le 19-03-2002 à 09:37:01  profilanswer
 

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" );
}


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

mood
Publicité
Posté le 19-03-2002 à 09:37:01  profilanswer
 

n°113969
lordankou
Posté le 19-03-2002 à 09:42:05  profilanswer
 

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


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

n°113971
deepcore
Posté le 19-03-2002 à 09:42:28  profilanswer
 

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..."
n°113973
deepcore
Posté le 19-03-2002 à 09:45:42  profilanswer
 

damned, j'ai rien dit.


---------------
"Si ça peut déconner, ça va déconner..."
n°113979
lordankou
Posté le 19-03-2002 à 09:52:58  profilanswer
 

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


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

n°114005
Lord II
PIB2000
Posté le 19-03-2002 à 10:42:05  profilanswer
 

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 .
n°114008
Lord II
PIB2000
Posté le 19-03-2002 à 10:45:49  profilanswer
 

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 .
n°114010
Lord II
PIB2000
Posté le 19-03-2002 à 10:46:45  profilanswer
 

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 .
n°114023
zi_ril_wan​ou
Posté le 19-03-2002 à 10:56:29  profilanswer
 

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 !
n°114026
Lord II
PIB2000
Posté le 19-03-2002 à 10:57:48  profilanswer
 

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 .
mood
Publicité
Posté le 19-03-2002 à 10:57:48  profilanswer
 

n°114027
Lord II
PIB2000
Posté le 19-03-2002 à 10:59:00  profilanswer
 

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 .
n°114035
Lord II
PIB2000
Posté le 19-03-2002 à 11:07:37  profilanswer
 

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 .
n°114037
zi_ril_wan​ou
Posté le 19-03-2002 à 11:10:32  profilanswer
 

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 !
n°114041
Lord II
PIB2000
Posté le 19-03-2002 à 11:13:46  profilanswer
 

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 .
n°114046
zi_ril_wan​ou
Posté le 19-03-2002 à 11:18:34  profilanswer
 

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 !
n°114088
lordankou
Posté le 19-03-2002 à 13:18:08  profilanswer
 

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).


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

n°114658
lordankou
Posté le 20-03-2002 à 08:53:40  profilanswer
 

ç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;
}


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

n°114698
Lord II
PIB2000
Posté le 20-03-2002 à 09:51:12  profilanswer
 

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 .
n°114701
Lord II
PIB2000
Posté le 20-03-2002 à 09:57:48  profilanswer
 

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 .
n°114711
Lord II
PIB2000
Posté le 20-03-2002 à 10:06:53  profilanswer
 

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 .
n°115191
lordankou
Posté le 20-03-2002 à 18:41:53  profilanswer
 

ç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;
}


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

n°115747
zi_ril_wan​ou
Posté le 21-03-2002 à 17:21:14  profilanswer
 

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 !
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

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

 

Sujets relatifs
j'en ai marre de cette erreur ds ma page web!!!!!!!!!!help!!!!!!!Erreur javascript sur les evenements (urgent)
[SQL - MySQL] Erreur avec COUNT()[VB6] Erreur de compliation
Gnâââââ erreur ASP ![JavaScript] Newbie -> erreur : null or not an object
[VB] erreur 10055: aucun espace memoire n'est disponibleerreur 405
Liste des codes Erreur ->GetLastError() ou je peux la trouver??? 
Plus de sujets relatifs à : [C] Elle est où mon erreur ??????? j'en ai marre !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR