Problème de gestion de liste

Résolu/Fermé
informatique_c Messages postés 30 Date d'inscription mardi 22 juillet 2014 Statut Membre Dernière intervention 17 mars 2016 - 2 nov. 2014 à 18:56
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 3 nov. 2014 à 19:53
Bonjour, mon code inser un joueur(structure) dans l'equipe(liste chainee) , voila les etapes
1-il y'a une fonction CreeJoueur() qui inser un element(joueur) dans une liste donner en paramaitre
2-il y'a aussi la fonction inserer() qui fais la getion et l'affectation du joueur entrer par (CreeJoueur())
2-a-
les condition de l'insertion dans ma liste sans :
- selon la position qui est un composon d'un joueur et qui est (soie G ,D,M ou A)

mon probleme c'est que l'insertion du 2emme element ne marche pas (le 2emme element doit etre entrer comme defensseur(position 'D') pasque g'ai pas encore fais toutes les cas )
et faites entrer le premier comme A attakon pour tester si le D prend la premiere place ou pas .

Mercie de me rependre.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//-------------------------------------------------------------------------
        typedef struct JOUEUR JOUEUR;
         struct JOUEUR{
             char* nom;
             char* prenom;
             char  position;
             int   valeur ;
             JOUEUR* suiv;
         };
//-------------------------------------------------------------------------
        typedef JOUEUR* LISTE;
//-------------------------------------------------------------------------
 LISTE equipe=NULL;
//--------------------------------------------------------------------------
/*prototyppes*/
void CreerJoueur(LISTE * lttemp);
void Inserer();
//-------------------------------------------------------------------------

int main(){
      Inserer();
    printf("\n\n\n\n1- %s %s %c %d \n\n",equipe->nom,equipe->prenom,equipe->position,equipe->valeur);
    Inserer();
    printf("\n\n 2- %s %s %c %d \n\n",equipe->suiv->nom,equipe->suiv->prenom,equipe->suiv->position,equipe->suiv->valeur);

free(equipe);
equipe=NULL;
return 0;
}
//-------------------------------------------------------------------------
void CreerJoueur(LISTE * lttemp){
          JOUEUR * nouveauMaillon=malloc(sizeof(JOUEUR));
          nouveauMaillon->nom=malloc(sizeof(char));
          nouveauMaillon->prenom=malloc(sizeof(char));
          nouveauMaillon->suiv=NULL;
          if(nouveauMaillon==NULL){
                puts("\n\nl'allocation n'as pas marcher\n\n");
                exit(EXIT_FAILURE);
               }
          puts("Faites entrez :");
          printf("le Nom :\n");
          scanf("%s",(nouveauMaillon->nom));
          printf("Le Prenom :\n");
          scanf("%s",(nouveauMaillon->prenom));
          printf("La position :\n");
          getchar();// vider la ligne
          nouveauMaillon->position=getchar();
          printf("La Valeur :\n");
          scanf("%d",&(nouveauMaillon->valeur));
          *lttemp=nouveauMaillon;
         }
//-------------------------------------------------------------------------
void Inserer(){
         int a=0;
         LISTE lttemp=NULL,rech=NULL,lt= NULL;
          CreerJoueur(<temp);
          //-----
           //vérifier si le nom existe déja dans la liste des joueurs
       /*  if(equipe!=NULL){
         lt=equipe;
         while(strcmp(lt->nom,lttemp->nom) != 0){
             lt=lt->suiv;
             }
         if(strcmp(lt->nom,lttemp->nom) != 0)a=1;
         }*/
 //-------------------------------------
    if(a==1){
           puts("\n erreur il exist déja un joueur qui a le meme nom dans l'equipe \n");
    }
    else{//si le nom n'existe pas dans l'equipe
         if(equipe == NULL){
              equipe=lttemp;
         }
         else{
         //  if(lttemp->position=='A')goto attak;
         //if(lttemp->position=='M')goto mil;
         //  if(lttemp->position=='D')goto def;
                 rech=equipe;
                 if(lttemp->position=='G'){
                     if(rech->position=='G' && rech!=NULL){
                      while(rech->position!='D'){
                        rech=rech->suiv;
                            }
                       if(rech!=NULL){
                        lttemp->suiv=rech;
                        rech=lttemp;
                       }else{
                        rech=equipe;
                         while(rech->position!='M'&& rech!=NULL){
                            rech=rech->suiv;
                            }
                            if(rech!=NULL){
                               lttemp->suiv=rech;
                               rech=lttemp;
                            }else{
                            rech=equipe;
                            while(rech->position!='A'&& rech!=NULL){
                                rech=rech->suiv;
                               }
                               if(rech!=NULL){
                                lttemp->suiv=rech;
                                rech=lttemp;
                               }else{
                                  rech=equipe;
                                  while(rech->suiv!=NULL){
                                    rech=rech->suiv;
                                  }
                                   rech->suiv=lttemp;
                               }
                            }
                       }
                     }
                 }
            }
       }
}
//--------------------------------------------



2 réponses

sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
3 nov. 2014 à 19:53
Bonsoir
Suite à ton message privé suivant; @informatique_c bonjour esque tu peux m'aider en c voila le lieun https://forums.commentcamarche.net/forum/affich-30999150-probleme-de-gestion-de-liste#p30999150

J'ai bien jugé de poster la réponse sur le forum de plus tu auras de l'aide facilement. Quant à moi je suis partie sur une base qui m'est propre en écrivant justes deux fonctions celle qui ajoute les éléments les unes à la suite des autres et celle qui affiche l'ensemble des donnés inséré, le reste c'est à toi de le faire comme, la désallocation de l'espace alloué, la recherche par non d'utilisateurs etc. de plus pour ma part je la trouve un peu complexe et surtout que je peux utiliser des tableaux à la place des pointeurs en fixant la taille bref un peu lourd la façon dont j'ai écrit le programme donc libre aussi aux ténors du forum de m'en faire part et me taper sur les doigts.
à bientôt

/**
*	Bibliothèque Langage C
**/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/**
* Structure de donnée
* ( Liste chaîner )
**/
typedef struct s_List{

	int iD;
	char *pNn;
	char *pPr;
	char *pP;

	struct s_List *pNext;
}ts_List;

/**
* 	Fonction insertion
* 	des données membres
**/
void f_Inserer(ts_List *pList, char *pN, char *pPr, char *pP){

	ts_List *p = pList;
	unsigned int iCpt = 0;
	while( p->pNext ){
		iCpt++;
		p = p->pNext;
	}

	/**
	* Allocation ( fin de liste )
	**/
	p->pNext = (struct s_List*)calloc( 1, sizeof(struct s_List) );
	if( p->pNext == NULL ){
		perror( "Erreur Allocation" );
		exit( EXIT_FAILURE );
	}
	p = p->pNext;

	/**
	* Allocation dynamique des membres
	* sans contrôle de la bonne allocation
	**/
	p->pP = (char*)calloc( strlen(pP), sizeof(char) );
	p->pNn = (char*)calloc( strlen(pN), sizeof(char) );
	p->pPr =(char*)calloc( strlen(pP), sizeof(char) );

	/**
	* Insertion des Données
	* & incrémentation des ID
	**/
	p->iD = iCpt++;
	strcpy(p->pP, pP );
	strcpy(p->pNn, pN );
	strcpy(p->pPr, pPr );
	p->pNext = NULL;
}

/**
* 	Fonction qui affiche l'ensemble des
* 	informations de la liste chaînée
**/
void f_Afficher_Liste( ts_List *pData ){

	ts_List *p = pData;
	while( p ){

		printf( "[\t%d\t]\t", p->iD );
		printf( "Nom\t:%s\t", p->pNn );
		printf( "Prenom\t:%s\t", p->pPr );
		printf( "Poste\t:%s\n", p->pP );
		p = p->pNext;
	}
}

/**
* 	Fonction principale
**/
int main( void ){

	ts_List List;
	(&List)->pNext = NULL;

	//Insertion
	f_Inserer( &List, "Toto", "titi", "Soldat");
	f_Inserer( &List, "Tata", "toto", "Caporale");
	f_Inserer( &List, "Cris", "tata", "Sergent");
	f_Inserer( &List, "Cros", "coco", "Adjudant");

	//Affichage
	f_Afficher_Liste( (&List)->pNext );


	return ( EXIT_SUCCESS );
}

1
informatique_c Messages postés 30 Date d'inscription mardi 22 juillet 2014 Statut Membre Dernière intervention 17 mars 2016 1
Modifié par informatique_c le 2/11/2014 à 22:21
la ligne 62 c'est : CreerJoueur(& lttemp);
0