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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

+ 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