Probleme en C

Fermé
nemo - 6 nov. 2010 à 11:06
 skrim - 30 juil. 2012 à 14:35
Bonjour,


voilà j'ai quelques soucis avec un programme que j'ai a faire en langage C: il s'agit d'écrire un programme (avec sous programme) qui trie un tableau de chaines de caracteres dans l'ordre alphabétique. (par exemple un tableau comme ceci :
bonjour
au revoir
salut
ciao

qui doit au final etre affiché comme suit :
au revoir
bonjour
ciao
salut

je ne comprends pas les warnings ni comment y remédier... si vous pouviez me donner un coup de main....
ci joint ce que j'ai écrit et les erreurs...

#include <stdio.h>
#include <stdlib.h>
#define n 5

void tri(char chaine1,char chaine2)
{
char premiere,autre;
premiere=chaine1;
strcmp(chaine1,chaine2);
if(chaine2<chaine1)
{
premiere=chaine2;
}
autre=chaine1;
chaine1=premiere;
premiere=autre;
}


void main()
{
char t[100];
int i;
t=(char*)malloc(n*sizeof(*t));
i=0;
while(i<n)
{
t[i]=(char*)malloc(n*sizeof(*t));
i=i+1;
}

i=0;
while(i<n)
{
printf("entrez un mot");
scanf("%s",t);
i=i+1;
}

i=0;
while(i<n)
{
tri(t[i],t[i+1]);
i=i+1;
}

return;
}

In function 'tri':|
warning: implicit declaration of function 'strcmp'|
warning: statement with no effect|
warning: return type of 'main' is not 'int'|
In function 'main':|
error: incompatible types when assigning to type 'char[100]' from type 'char *'|
warning: assignment makes integer from pointer without a cast|
||=== Build finished: 1 errors, 4 warnings ===|

NB : je suis sous code blocks....

merci à tous

2 réponses

supertomtom Messages postés 316 Date d'inscription jeudi 29 octobre 2009 Statut Membre Dernière intervention 28 novembre 2010 83
6 nov. 2010 à 11:11
Regarde aussi quand tu clique sur l erreur sa te met la ligne. Mais dans la fnction mqin tu ecrit int i; et apres i=0
Essai directemeny de faire : int i=0;
0
merci ^^ mais depuis le début de l'année on fait comme ca avec la prof et ca marche très bien, le problème ne semble pas être la....
0
nan mais ça te premet de réduire tes lignes de codes ;) (ce qui est toujours utile dans un langage aussi bas niveau que le C x) )
0
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
6 nov. 2010 à 12:09
bonjour,

beaucoup d'erreurs,
tu déclares un tableau de 100 caractères: char T[100].
ce que tu souhaites est un tableau de 5 chaines de caractéres.
donc char **T ou char *T[n] si tu veux fixer la taille. (précises le nom de ta macro, plutot que n, mets NB_CHAINES par exemple).
ensuite, tu peux faire tes allocations dynamiques.
Ta fonction tri devrait avoir en paramètres des char *, voire comme tu l'as écrit des char **. (ne pas oublier que les paramètres en C sont passés par valeur et non par référence).

bon courage
0
merci ydurce ^^ j'ai compris pour la déclaration du tableau, mais ce qui concerne les malloc avec les * je n'arrive vraiment pas, je ne sais plus ou mettre des *, des **, des char *, des char **.....
0
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
6 nov. 2010 à 13:15
pour un tableau 2 dimensions, on doit allouer de la mémoire pour les 2 dimensions, donc:

char **T;   //un pointeur de pointeur

T=(char **) malloc(NB_CHAINES*sizeof(char *)); 
/* tu alloues en mémoire un espace contigu pour NB_CHAINES pointeurs de caractéres*/

for(int i=0;i!=NB_CHAINES;i++)
   T[i]=(char *)malloc (100 * sizeof(char));
/* tu alloues en mémoire un ensemble de NB_CHAINES espaces contigus de 100 caractéres et  l'adresse de chacun de ces espaces est placée dans le tableau T de T[0] à T[NB_CHAINES-1]*/


pour accéder à une chaine, tu feras T[x] qui te ''renverras' un char* , par exemple pour

printf("%s",T[0]);


t'imprimera la première chaine de caractères.
0
oh la la merci merci !!!!!! :D alors ca compile tout ca tout ca, mais par contre mon tri marche pas (j'ai fait en sorte d'afficher les chaines a la fin mais il les laisse dans le même ordre...) est-ce que la méthode de tri pour les entiers marche de la même façon pour les char ?

en tout cas merci beaucoup !!!
0