Probleme en C
nemo
-
skrim -
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
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
-
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; -
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-
-
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. -
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 !!!
-