IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

return chaine de caractère


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Par défaut return chaine de caractère
    bonsoir,
    je revien vers vous avec un petit soucis.

    voila je veux utiliser une fonction de recherche dans une liste chainée qui me renvoie un chaine de caratère.
    mais je ne sais pas comment doit etre le prototype.
    voila ce que j'ai fait mais mon compilo me vire mors de l'appelle de la fonction dans le main.

    prototype:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* comparatif(ST_BDR *r_tete, ST_BDF *f_tete);
    appelle de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void main()
    {
        .....
        char conclusion[15];
         conclusion=comparatif(r_tete,f_tete);
         .........
    }
    est_ce que kelkun peut m'aider .
    merci

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par calagan
    bonsoir,
    je revien vers vous avec un petit soucis.

    voila je veux utiliser une fonction de recherche dans une liste chainée qui me renvoie un chaine de caratère.
    mais je ne sais pas comment doit etre le prototype.
    voila ce que j'ai fait mais mon compilo me vire mors de l'appelle de la fonction dans le main.

    prototype:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* comparatif(ST_BDR *r_tete, ST_BDF *f_tete);
    appelle de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void main()
    {
        .....
        char conclusion[15];
         conclusion=comparatif(r_tete,f_tete);
         .........
    }
    est_ce que kelkun peut m'aider .
    merci
    Le prototype est correct, par contre l'appel est faux. Le prototype dit que la fonction comparatif() renvoie un pointeur sur char. Il suffit donc de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main(void)
    {
        .....
        char *conclusion;
        conclusion=comparatif(r_tete,f_tete);
         .........
    }
    Et bien entendu il faudra faire une allocation dynamique de mémoire dans ta fonction comparatif(), mais ça je pense que tu le savais déjà....

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Par défaut
    merci bcp crocodilex pour ta participation et en plus sa marche lol

  4. #4
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Par défaut
    par contre j'aurais une petite question à propos de liste chainée.

    voici mes 2 structures:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    typedef struct BDF
    {
    	char type_eau[10];
    	char temp[3];
    	int PH;
    	char nom_poisson[15];
    	struct BDF *suiv;
     
    }ST_BDF;
     
     
    typedef struct BDR
    {
    	char nom_poisson[15];
    	struct BDR *suiv;
    	ST_BDF *fait;
    }ST_BDR;
    j'ai créer un fonction d'ajout de maillon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    ST_BDR* insertregle( ST_BDR *r_tete)
    {
     
    	ST_BDR *nouvo=NULL;
    	ST_BDR *courant=NULL;
    	nouvo=(ST_BDR*) malloc (sizeof(ST_BDR));
    	if (nouvo==NULL)
    	{
    		return r_tete;
    	}
    	else
    	{
    		printf("\n\nsaisir poisson:");
    		scanf("%s",nouvo->nom_poisson);//fonctionne
    		printf("saisir type eau:");
    		scanf("%s",nouvo->fait->type_eau);//marche pas le compilo me refuse l'accés
    		printf("saisir temp:");
    		scanf("%s",nouvo->fait->temp);
    		nouvo->suiv=NULL;
    		if(r_tete==NULL)
    		{
    			return nouvo;
    		}
    		else
    		{
    			courant=r_tete;
    			while (courant->suiv!=NULL)
    			{
    				courant=courant->suiv;
    			}
    				courant->suiv=nouvo;
    				return courant;
     
    		}
    	}
    }
    scanf("%s",nouvo->fait->temp); pas moyen de passer le scanf, je ne comprend pas pourquoi alors que scanf("%s",nouvo->nom_poisson);//fonctionne

    merci pour votre aide

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Evite le scanf et utilise fgets(buf, sizeof buf, stdin).
    Consulte la FAQ C à ce sujet.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Par défaut
    non fgets ne marche pas non plus j'ai pas l'accés à l'écriture

  7. #7
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par calagan
    par contre j'aurais une petite question à propos de liste chainée.

    voici mes 2 structures:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    typedef struct BDF
    {
    	char type_eau[10];
    	char temp[3];
    	int PH;
    	char nom_poisson[15];
    	struct BDF *suiv;
     
    }ST_BDF;
     
     
    typedef struct BDR
    {
    	char nom_poisson[15];
    	struct BDR *suiv;
    	ST_BDF *fait;
    }ST_BDR;
    j'ai créer un fonction d'ajout de maillon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    ST_BDR* insertregle( ST_BDR *r_tete)
    {
     
    	ST_BDR *nouvo=NULL;
    	ST_BDR *courant=NULL;
    	nouvo=(ST_BDR*) malloc (sizeof(ST_BDR));
    	if (nouvo==NULL)
    	{
    		return r_tete;
    	}
    	else
    	{
    		printf("\n\nsaisir poisson:");
    		scanf("%s",nouvo->nom_poisson);//fonctionne
    		printf("saisir type eau:");
    		scanf("%s",nouvo->fait->type_eau);//marche pas le compilo me refuse l'accés
    		printf("saisir temp:");
    		scanf("%s",nouvo->fait->temp);
    		nouvo->suiv=NULL;
    		if(r_tete==NULL)
    		{
    			return nouvo;
    		}
    		else
    		{
    			courant=r_tete;
    			while (courant->suiv!=NULL)
    			{
    				courant=courant->suiv;
    			}
    				courant->suiv=nouvo;
    				return courant;
     
    		}
    	}
    }
    scanf("%s",nouvo->fait->temp); pas moyen de passer le scanf, je ne comprend pas pourquoi alors que scanf("%s",nouvo->nom_poisson);//fonctionne

    merci pour votre aide
    Je ne vois pas l'initialisation du pointeur "nouvo->fait" !!!!

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Par défaut
    L'erreur vient du fait que tu n'a pas crée la struture fait.

    Sinon, y'a un ou deux truc qui me parait étrange:
    • Tu fais un scanf sur un tableau de 15, tu risque un dépassement
    • Est-ce necessaire de parcourir toute la liste chainée pour ajouter nouveau à la fin ? Tu peux pas faire nouveau->suivant=r_tete, et inverser l'ordre de ta liste ? Je connais pas ton programme, mais il faut des fois aller au plus simple.

  9. #9
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par yorke
    • Est-ce necessaire de parcourir toute la liste chainée pour ajouter nouveau à la fin ? Tu peux pas faire nouveau->suivant=r_tete, et inverser l'ordre de ta liste ? Je connais pas ton programme, mais il faut des fois aller au plus simple.
    Autant maintenir un pointeur de fin de liste, ce sera plus simple ! (inverser une liste chaînée, c'est bien du point de vue algo mais inefficace en pratique et sûrement plus compliqué qu'un simple parcours de liste).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  10. #10
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Par défaut
    Citation Envoyé par yorke
    L'erreur vient du fait que tu n'a pas crée la struture fait.

    Sinon, y'a un ou deux truc qui me parait étrange:
    • Tu fais un scanf sur un tableau de 15, tu risque un dépassement
    • Est-ce necessaire de parcourir toute la liste chainée pour ajouter nouveau à la fin ? Tu peux pas faire nouveau->suivant=r_tete, et inverser l'ordre de ta liste ? Je connais pas ton programme, mais il faut des fois aller au plus simple.
    salut si tu regarde bien j'ai deux structures ST_BDR et ST_BDF
    ST_BDF *fait
    donc je ne pense pa que le probleme viennent de là.

    cepandant jsui pluto d'avis pour l'initialisation courant->fait
    où dois-je la faire, en début de fonction surement????

    merci à tous

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Par défaut
    D'accord, tu as le pointeur vers fait, mais je vois pas ou tu alloue la mémoire pour la structure.

    genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            nouvo=(ST_BDR*) malloc (sizeof(ST_BDR));
    	if (nouvo==NULL)
    	{
    		return r_tete;
    	}
    	else
    	{
                    nouvo->fait=(ST_BDF*) malloc (sizeof(ST_BDF));
    		nouvo->fait->suiv=NULL;
     
    		printf("\n\nsaisir poisson:");
    		...
    	}
    sinon, juste un petit truc, pour les struct, j'aime bien definir un type pointeur, ca t'evite de t'embeter partout avec des *, mais c'est une question de gout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct _machin {
     
    } Machin, *pMachin;

  12. #12
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Par défaut
    oki je vais essayer de faire l'allocation mémoire.

    merci je vous tien au courant

  13. #13
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Par défaut
    vraiment merci, je ne pensé pas qu'il fallait aussi faire une allocation mémoire pour le *fait alrs qu'il fait parti de la structure ST_BDR qui elle a une allocation.

    en tout cas merci pour l'aide.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Par défaut
    Si tu as que 1 fait, mets pas ta structure en dynamique, ca te simplifiera la vie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct BDR
    {
    	char nom_poisson[15];
    	struct BDR *suiv;
    	ST_BDF fait;
    }ST_BDR;
    Apres pour acceder aux elements de fait: nouvo->fait.element


    , mais si tu as plusieurs fais, il faut que tu fasse une liste chainée dans ta liste chainée, ou un tableau dynamique au choix.

  15. #15
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Par défaut
    en effet j'ai plusieurs fait donc il va falloir faire du dynamique.

    merci pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Crypter une chaine de caractères
    Par Yabo dans le forum Réseau
    Réponses: 18
    Dernier message: 19/11/2004, 23h04
  3. Réponses: 9
    Dernier message: 17/01/2003, 11h45
  4. Lire Une Chaine De Caractères
    Par Jonathan_Korvitch dans le forum C
    Réponses: 12
    Dernier message: 07/01/2003, 05h37
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo