Probleme de return en C ???? [Résolu]

Signaler
Messages postés
34
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
18 mai 2005
-
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
-
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

Messages postés
34
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
18 mai 2005

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;
}
Messages postés
196
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
1 mai 2009
2
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
Messages postés
34
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
18 mai 2005

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;
}
Messages postés
196
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
1 mai 2009
2
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
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,



Attention avec le gets, préférer fgets

Matt...
Messages postés
34
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
18 mai 2005

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"
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

re-bonsoir,



fgets(buf, size, stdin);


Matt...
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
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.
Messages postés
34
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
18 mai 2005

en C :


char *fgets(char *s, FILE *stream)
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
char *fgets (char *s, int size, FILE *stream);

sinon fgets serait buggée au mem titre que gets.