Probleme en C

nemo -  
 skrim -
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

  1. supertomtom Messages postés 367 Statut Membre 83
     
    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
    1. nemo
       
      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
    2. skrim
       
      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
  2. ydurce Messages postés 81 Statut Membre 18
     
    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
    1. nemo
       
      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
    2. ydurce Messages postés 81 Statut Membre 18
       
      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
    3. nemo
       
      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