Probleme de return en C ????

Résolu
cs_nach73 Messages postés 34 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 18 mai 2005 - 17 mai 2005 à 22:43
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 18 mai 2005 à 19:00
Bonjour,
J'ai creer une fonction qui renvoie 2 chaine de caractere.
J'aimerai savoir comment peut-on les receptioners, si c'est possible.
Merci.

10 réponses

cs_nach73 Messages postés 34 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 18 mai 2005
18 mai 2005 à 01:05
sympa, mais sa fonctionne pas, mais l'idee de la structure est bonne et ma vachement aide .
Merci bcp.
Voila se que j'ai fait et elle fonctionne :

#include<malloc.h>
#include<stdio.h>


struct
{
char Chaine1[30];
char Chaine2[30];
} CHAINE;



void ChaineRechValide (char *Ch)
{

char ch2[30];
char* p =strrchr(Ch,'>'); /*>ch<*/
while(*p != '>') p--;
strcpy(CHAINE.Chaine1, p); /*>aine<*/
*p = 0;
strcpy (CHAINE.Chaine2, Ch);
return ;
}


int main ()
{
char chaine[30];
char tmp, ch;
printf("Entrez chaine : ");
gets(chaine);
ChaineRechValide (chaine);
printf("\n%s ",CHAINE.Chaine1);
printf("\n%s ",CHAINE.Chaine2);
getc(stdin);
fflush(stdin);
return 0;
}
3
Lord_Patoche Messages postés 196 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 1 mai 2009 3
17 mai 2005 à 23:02
Donne en valeur de retour à ta fonction une vleur de type structure qui contiendra deux chaines de caratères.
Ex :
struct CHAINE
{
char ChaineA[100];
char ChaineB[100];
}ElementRenvoye;

CHAINE CreationChaine(void)
{
//Code créant et renvoyant une valeur de type CHAINE
}

int main()
{
ElementRenvoye = CreationChaine();
return 0;
}

NB : Autre solution : Si tes chaines peuvent être déclarées au préalable, tu peux utiliser le passage par référence.

LaPatoshe
0
cs_nach73 Messages postés 34 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 18 mai 2005
17 mai 2005 à 23:12
excuse je te ne suis pas
voila mon code:
on doit rentre une chaine du type >ch<>aine<
et je veux quel me renvoie >ch< et >aine<
c'est ce quel fait,sauf que je ne sais pas comment les recuperees.

char *ChaineRechValide (char *ch)
{
char ch2[30];
char* p =strrchr(ch,'>'); /*>ch<*/
while(*p != '>') p--;
strcpy(ch2,p); /*>aine<*/
*p = 0;
return (ch,ch2);
}

main ()
{
char chaine[30];
char tmp,ch;
printf("Entrez chaine : ");
gets(chaine);
ChaineRechValide (chaine);
??????
getc(stdin);
fflush(stdin);
return;
}
0
Lord_Patoche Messages postés 196 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 1 mai 2009 3
17 mai 2005 à 23:36
Si je comprends bien, tu envoie dans ta fonction *ch, et tu veux retourner *ch et *ch2. Par définition, une fonction ne peut que renvoyer une seule valeur. Si tu veux en renvoyer plusieurs, il faut passer ces valeur par référence à ta fonction, et transformer ces mêmes valeurs à l'intérieur.


L'autre solution, c'est de créer une structure définie pour renfermer des chaines de caractère. Ainsi, tu renvoies une variable du type de ta structure, donc qui renferme tes deux chaines de caractère.
Vu ton programme, ta fonction reçoit en paramètre une chaine de caractère ch. Il faudra la modifier pour qu'elle reçoive ta structure.

#include<malloc.h>


struct CHAINE
{
char *Chaine1;
char *Chaine2;
} Element;

CHAINE ChaineRechValide (char *Element.Chaine1)
{
CHAINE ElementB;
char ch2[30];
char* p =strrchr(ch,'>'); /*>ch<*/
while(*p != '>') p--;
strcpy(ch2,p); /*>aine<*/
*p = 0;
ElementB.Chaine1 = (char*) malloc(100);
ElementB.Chaine2 = (char*) malloc(100);
strcpy(ElementB.Chaine1, Element.Chaine1);
strcpy (ElementB.Chaine2, ch2);
return ElementB;
}

int main ()
{
char chaine[30];
char tmp, ch;
printf("Entrez chaine : ");
gets(chaine);
ChaineRechValide (chaine);
??????
getc(stdin);
fflush(stdin);
return 0;
}

LaPatoshe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
18 mai 2005 à 18:19
Bonsoir,



Attention avec le gets, préférer fgets

Matt...
0
cs_nach73 Messages postés 34 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 18 mai 2005
18 mai 2005 à 18:25
Desole mais "fgets" sert a aller chercher un caractere dans un fichier, tandis "gets" est une saisie console qui accepte les espace, contrairement a "scanf"
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
18 mai 2005 à 18:42
re-bonsoir,



fgets(buf, size, stdin);


Matt...
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
18 mai 2005 à 18:46
nachh73, gets lis stdout (qui généralement est un fichier associé au
clavier) et non la console. De plus gets est dépréciée car buggée.

Il faut remplacer gets(chaine) par fgets( chaine, sizeof chaine, stdin ) mais bon, dans ton code tout est à revoir.
0
cs_nach73 Messages postés 34 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 18 mai 2005
18 mai 2005 à 18:47
en C :


char *fgets(char *s, FILE *stream)
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
18 mai 2005 à 19:00
char *fgets (char *s, int size, FILE *stream);

sinon fgets serait buggée au mem titre que gets.
0
Rejoignez-nous