Elle est où mon erreur ??????? j'en ai marre ! [C] - Programmation
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
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.
Marsh Posté le 19-03-2002 à 09:45:42
damned, j'ai rien dit.
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
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
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]
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]
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 ???
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="";
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é
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
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" );
}
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]
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" );
}
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).
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;
}
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.....
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]
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]
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;
}
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.
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" );
}
---------------