J'ai déjà tout essayer j'ai utilisé les structure rien les pointeurs sur les tableau rien et pourtant se soit les structure ou les pointeurs ça arrive a prendre les noms et les stocker en mémoire mai le tri ne donne pas
Et j'ai pensé o tableau a 2d mai l'autre là ça n'arrive pas a prendre les noms une fois erreur
[Dal]
Contributeur
Salut a.brice,
Alors, comme ton problème a l'air d'être, en fait, comment structurer tes données, voilà quelques indications :
Les tableaux contenant plusieurs chaînes de caractères en C sont effectivement des tableaux de tableaux (donc des tableaux 2D) vu qu'une chaîne est elle même un tableau de caractères terminé par le caractère '\0'.
Une façon de faire est de déclarer un pointeur sur un pointeur sur char, d'allouer la mémoire nécessaire pour 3 pointeurs sur char, et d'y mettre les pointeurs sur tes chaînes de caractères (dont l'espace doit lui même être alloué).
Tu ne précises pas si ces noms sont saisis par l'utilisateur ou pas.
Alors, en supposant qu'ils ne le soient pas, tu peux faire comme cela pour initialiser tes chaînes et structure de données :
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n;
const int max_noms = 3;
char * st1 = "Riri";
char * st2 = "Fifi";
char * st3 = "Loulou";
/* on réserve la mémoire nécessaire à 3 pointeurs sur char */
char ** noms = malloc(3 * sizeof(char *));
/* on affecte nos 3 pointeurs sur char dans le tableau */
noms[0] = st1;
noms[1] = st2;
noms[2] = st3;
/* afficher la liste non triée */
printf("la liste de noms avant le tri est :\n");
for (n = 0; n < max_noms; n++)
printf("%s\n", noms[n]);
/* faire le tri ici */
TODO
/* afficher la liste triée */
printf("la liste de noms après le tri est :\n");
for (n = 0; n < max_noms; n++)
printf("%s\n", noms[n]);
/* libérer la mémoire allouée */
free(noms);
return 0;
}
ensuite, tu as juste besoin de la fonction strcmp() dans string.h pour les comparer
int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements);
int comparer(char* nom1, char* nom2);
void insereNom(ETUDIANT *tab_etu, int nbelements,int pos);
void affiche(ETUDIANT *tab, int nb_etu);
int main()
{
ETUDIANT tab[MAX_etu];
int nb_etu;
float note;
char reponse;
int i=0,j=0;
printf("entrez le nombre d'etudiants\n");
scanf("%d",&nb_etu);
fgetc(stdin);
for(i=0;i<nb_etu;i++)
{initialise(tab,i);//fonction déja définie
j=recherchePosition(tab,tab[i].nom,tab[i].prenom,i);//c'est la fonction qui me pose le plus problème
printf("----------valeur retournee vaut-----%d--------------\n\n",j);// juste pour avoir le resultat sous les yeux
insereNom(tab,i+1, j);//pour inserer le dernier nom entré à la place qu'il doit occuper.
}
affiche(tab,nb_etu);//pour afficher le tableau
}
voici les fonctions que j'ai appelées sur le programme principal:
int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements)
{
// int n, m,k=0,i=0;
int i;
int j=0;
for(i=0;i<=nbelements;i++)
{
if(strcmp((tab_etu[i].nom),nom1)<0)
{ j++;
}
}
return j;
}
void insereNom(ETUDIANT *tab_etu, int nbelements,int pos)
{
int i,j=nbelements;
i=pos; //recherchePosition(tab_etu,tab_etu[j-1].nom,tab_etu[j-1].prenom,nbelements);
j=nbelements;
while(j>i)