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;
Essai directemeny de faire : int i=0;
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....
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) )
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
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:
pour accéder à une chaine, tu feras T[x] qui te ''renverras' un char* , par exemple pour
t'imprimera la première chaine de caractères.
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 !!!
en tout cas merci beaucoup !!!