Elmoricq Modérateur
| Bon alors, très rapidement :
Code :
- /* malloc.h ?! pas standard... normalement malloc()
- est dans stdlib.h */
- #include<malloc.h>
- #include<stdio.h>
- #include<string.h>
- #include<time.h>
- #include<stdlib.h>
- /* inutile de prototyper une fonction dont l'imprémentation
- se trouve juste en dessous ;) */
- int compare_chaines(const void *chaine1,const void *chaine2) ;
- int compare_chaines(const void *chaine1,const void *chaine2)
- {
- /* eh non, comme je le disais, qsort() t'envoie des POINTEURS
- vers tes elements a comparer... donc tes const void *
- cachent en fait des... const char ** ! */
- return strcmp (chaine1,chaine2);
- }
- /* Main() ?! Avec un 'm' majuscule ?!
- Deux prototypes standards de main() :
- int main(void);
- int main(int argc, char **argv); */
- Main()
- {
- int nb_chaines,i;
- char **chaine ;
- char tampon[256+1];
- //entrée du nombre de chaines
- printf("combien de chaines voulez vous rentrer? \n" );
- /* bof : scanf() c'est une fonction a deconseiller aux debutants,
- elle n'est pas triviale a utiliser.
- Vois plutot fgets() pour la saisie, et strtol() pour la conversion
- en nombre
- */
- scanf("%d",&nb_chaines);
- /* le cast est inutile, et on peut s'afranchir du typage dans le
- sizeof, ce qui nous permet de rendre le code plus flexible :
- chaine = malloc( nb_chaines * sizeof *chaine);
-
- De plus, qu'arrive-t-il si nb_chaines est negatif ? ;)
- */
- chaine=(char**)malloc(sizeof(char*)*nb_chaines);
- //entrée des chaines de caractere
- /* Dans un contexte pointeur, on teste avec NULL, et non avec 0 :
- if ( chaine != NULL )
- Voire :
- if ( chaine )
- */
- if (chaine!=0)
- {
- scanf("%*c" );
- for(i=0;i<nb_chaines;i++)
- {
- /* Le souci c'est que toute ligne ne se terminant pas par
- un saut de ligne attendra peut-etre dans le buffer de
- sortie avant d'etre affichee.
- Ce qui veut dire que tu ne la verras peut-etre qu'APRES
- que tu aies tape [ENTREE] !
- Toute sortie ne se terminant pas par un saut de ligne
- devrait se voir suivre d'un :
- fflush(flux_de_sortie);
- (ici, flux_de_sortie == stdout)
- */
- printf("entrez une chaine :" );
- /* AAAAAAAAAAAAAAAAAAAAAARRRRRRRRGH !!
- NE JAMAIS UTILISER gets() !
- gets() est obsolete depuis des annees, et pour une
- bonne raison : il n'y a aucun controle de depassement
- de capacite avec !
- Cette fonction est a abolir de ton vocabulaire.
- Pour toujours.
- */
- gets(tampon);
- chaine[i]=(char*)malloc(strlen(tampon)+1);
- if (chaine[i]!=0)
- {
- strcpy(chaine[i],tampon);
- }
- }
- }
- //tri
- qsort(chaine,nb_chaines,sizeof(*chaine),compare_chaines);
-
- //affichage
- for(i=0;i<nb_chaines;i++)
- {
- /* pourquoi puts() en plus du printf() ?
- printf("\nchaines n°%d : %s", i+1, chaine[i] );
- */
- printf("\nchaines n %d : ",i+1);
- puts(chaine[i]);
- }
- }
|
|