Trier un tableau d'enregistrement

Fermé
sam - 25 oct. 2013 à 17:49
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 29 oct. 2013 à 13:50
Bonjour
je cherche à trier un tableau d'enregistrement qui contient des chaines et des entiers ,et le tri doit se faire par rapport à l'une des chaines (tri par ordre alphabétique),mais le problème est que j'ai pas pu utiliser strcpy pour 2 champs d'un tableau malgré que ces 2 champs sont des chaines de caractères.
A voir également:

2 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
25 oct. 2013 à 19:45
Bonjour sam,

"mais le problème est que j'ai pas pu utiliser strcpy pour 2 champs d'un tableau malgré que ces 2 champs sont des chaines de caractères"

La description de ton problème est incompréhensible. On ne peut pas t'aider sans plus de précisions.

Montre la partie de code qui pose problème, explique ce qu'elle devrait faire, ce qu'elle fait, et pourquoi tu penses que tu as "un problème".

Quand tu postes ton code, poste le entre balises <code>, pour qu'il soit lisible. Comme cela :

<code>
#include <stdio.h>

int main(void)
{
printf("Hello world\n";

return 0;
}
</code>


Dal
0
bon voila j fait un tr bulle pour trier le tableau c juse un essai je sais pas si c logique


#include <stdio.h>

struct identite
{
char mot[256];
char fichier[256];
int ligne;
int position_ligne;
};

void tri_bulle(struct identite *tab, int n)
{
int fin_tri;
struct identite echange[1];
int i=0;
{
int fin_tri = 1;
while(i<n)
{
if( strcmp(tab[i].mot,tab[i+1].mot)>0)
{

strcpy(echange.mot,tab[i].mot);
strcpy(echange.fichier,tab[i].fichier);
echange.ligne=tab[i].ligne;
echange.position_ligne=tab[i].position_ligne;
strcpy(tab[i].mot,tab[i+1].mot);
strcpy(tab[i].fichier,tab[i+1].fichier);
tab[i].ligne=tab[i+1].ligne;
tab[i].position_ligne=tab[i+1].position_ligne;
strcpy(tab[i+1].mot,echange.mot);
strcpy(tab[i+1].fichier,echange.fichier);
tab[i+1].ligne=echange.ligne;
tab[i+1].position_ligne=echange.position_ligne;

fin_tri = 0;
}
}while(fin_tri == 0);
}



}

int main()
{
struct identite tableau[3];
tableau[0].mot="asma";
tableau[1].mot="sonia";
tableau[2].mot="hadjer";
tableau[3].mot="celia";
tri_bulle(*tableau,3);
for(i=0,i=3,i++)
{
printf("tab[%d]=%s",i,tableau[i].mot);
}
}
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 29/10/2013 à 13:54
Désolé de n'être pas revenu vers toi tout de suite.

Il y a beaucoup d'erreurs dans ton code, et il faut s'armer de courage (et de temps) pour te répondre utilement.

- si ton tableau de struct a 4 éléments, tu dois le déclarer avec 4 éléments :
struct identite tableau[4];
et non 3.

- tu ne peux pas faire
tableau[0].mot = "asma";
pour affecter une chaîne. Tu dois utiliser la fonction strcpy et inclure string.h. Comme cela :
strcpy(tableau[0].mot, "asma");

- comme
tableau
est un tableau,
tableau
est déjà un pointeur. C'est un pointeur vers le premier élément du tableau. Donc, ton appel à tri_bulle devrait être :
tri_bulle(tableau, 4);
(et c'est 4 éléments qui sont contenus, pas 3)

- pour ta fonction,
void tri_bulle(struct identite *tab, int n)
est un prototype correct

- ta déclaration de echange devra être simplement :
struct identite echange;
car tu ne veux là qu'un seul struct

- tes boucles ne vont pas. Fais un do / while pour contrôler si as toujours des bulles, et une simple boucle for à l'intérieur pour parcourir le tableau

- pour permuter le contenu de struct en C, tu peux simplement les affecter. Par exemple :
echange = tab[i];
, inutile d'affecter les membres de la struc un par un


stp, avant de poster du code, essaye avant de le compiler avec tous les warnings (avec gcc l'option -Wall est déjà un bon début), et corrige toutes les erreurs de syntaxe empêchant la compilation, et comprend la raison des warnings émis par le compilateur et fais ce qu'il faut pour y remédier et faire taire tous les warnings. Si tu ne sais pas comment les corriger, vois ton cours de C, un manuel, cherche par toi même, et si tu n'y arrives pas pose la question ici :-)


Dal
0