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 :

Debbug pour débutant


Sujet :

C

  1. #1
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut Debbug pour débutant
    Bonjour, je suis en train d'ecrire un petit programme que j'essai de compiler au fur et a mesur pour elever les erreurs d'ecriture.
    Malheureusement pour moi j'ai des warning et des erreurs que je ne sais pas resoudre.
    Quelqu'un pourrait il m'aider a les resoudre et m'expliquer aussi l'erreur?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bibliotheque *nouv=SaisieLivre();
    Warning initialization makes point from integer without a cast

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char *choix;
    Bibliotheque *courant;
    if (strcmp(courant->*choix,courant->suiv->*choix)>0)
    syntax error before *

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 20
    Points
    20
    Par défaut
    pourrais tu s'il te plait nous montrer l'implémentation de Bibliotheque.

    Ensuite strcmp va te comparer 2 char*.
    Dans ton cas tu dois surement vouloir faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcmp(courant->???; choix);
    ou enfin quelque chose comme ça.

    Donc montres nous l'architecture de Bibliotheque puis on verra mireux quoi faire.

    Stef

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcmp(courant->*choix,...
    L'utilisation de -> suppose que courant est un pointeur sur une structure (ou une union). Derrière le -> doit figurer le nom d'un champ de la dite structure. Il ne peut donc PAS y avoir un opérateur de déréférencement *
    A noter que ce choix n'a rien à voir de toute façon avec celui figurant dans l'expression courant->...
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Debbug pour débutant
    Citation Envoyé par BFH
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bibliotheque *nouv=SaisieLivre();
    Warning initialization makes point from integer without a cast
    Ca signifie que le compilateur considère que la fonction retourne un entier (int, probablement), ce qui ne rentre pas dans un pointeur, évidemment (pas le bon type). Le comportement est indéfini.

    Il manque probablement une définition d'interface avant l'appel (définition de fonction, prototype séparé...)

    Une regle simple : ce qui est utilisé doit avoir été déclaré au préalable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char *choix;
    Bibliotheque *courant;
    if (strcmp(courant->*choix,courant->suiv->*choix)>0)
    syntax error before *
    Des '*' en trop. Il ne faut pas programmer au hasard, mais apprendre les regles syntaxiques du langage. Pour atteindre un élément de structure, on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
       struct x
       {
          int a;
       };
     
       struct x y;
     
       y.a = 123;
    Si on a un pointeur de structure, on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       struct x
       {
          int a;
       };
     
       struct x y;
       struct x *p = &y;
     
       (*p).a = 123;
    Vu le coté lourd de l'expression, le langage C a défini une écriture plus compacte :
    Pas de Wi-Fi à la maison : CPL

  5. #5
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    En fait désole c'était juste une faute de frappe!
    j'appelais la fonction "SaisieLivre" mais j'avais créé la fonction "Saisie_Livre"

    Sinon quand j'enleve les * des mon second bug:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void Trier(Bibliotheque *tete)
    {
    	char *choix;
    	Bibliotheque *courant=tete;
    	Bibliotheque *suivant=tete;
    	choix =Choix_Trie();
    	while(suivant!=NULL)
    	{
            if(strcmp(courant->choix,suivant->choix)>0)
            {
                courant->droite=suivant;
            }
    /*j'ai pas mis la suite*/
    ça me retourne comme erreur :
    structure has no member named `choix'

    Je comprends pas pourquoi ça bug, la fonction Choix_Trie retourne une chaine de caracteres qui est soit 'Auteur' soit 'Titre' Et ces 2 mots sont 2 champs de la Bibliotheque.

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par BFH
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	Bibliotheque *courant=tete;
    <...>
            if(strcmp(courant->choix,suivant->choix)>0)
    structure has no member named `choix'
    Montre la definition de 'Bibliotheque'.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Voici ma definition de bibliotheque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct livre
    {
    	char Titre[50];
    	char Auteur[20];
    	char MEdition[10];
    	int Annee;
    	int NbPages;
    	int Prix;
    	struct livre *gauche;
    	struct livre *droite;
    };
     
    typedef struct livre Bibliotheque;

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par BFH
    Voici ma definition de bibliotheque:
    Ben oui, je ne vois pas de 'choix'.

    Or tu as écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strcmp(courant->choix,suivant->choix)>0)
    Y'a un bug...
    Pas de Wi-Fi à la maison : CPL

  9. #9
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    En fait, c'est pas si simple:
    Ma Bibliotheque contient les champs 'Auteur' & 'Titre'

    Ma fonction 'Trier' fait appel a la fonction 'Choix_Trie' or 'Choix_Trie fait ça:
    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
    char * Choix_Trie(void)
    {
    	char choix;
    	char *chaine = malloc(7);
     
    	printf("Souhaitez vous effectuer un tri par Titre ou par Auteur (t/a) ?\n");
     
    	scanf("%c",&choix);
     
    	if (choix!='a' || choix!='t')
    	{
    		printf("Erreur de saisie de choix de trie !\n");
    		Choix_Trie();
        }
    	else
    	{
    		if (choix == 'a')
    			{
    			strcpy(chaine,"Auteur");
    			}
    		if (choix == 't')
    			{
    			strcpy(chaine,"Titre");
    			}
    	}
    	return chaine;
    }
    Donc devrais faire que choix=Auteur ou Titre

    Mais non apparement...

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("Erreur de saisie de choix de trie !\n");
          Choix_Trie();
    Tu es obligé de faire ça en récursif? Utilisé ainsi, c'est générateur de bugs et difficile à maintenir... une boucle serait plus indiquée...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Arg... heu ... Salut

    Non, le C ne te permet pas d'utiliser une chaine de caractère pour manipuer le membre xxx d'une structure (certains langages le permettent (script shell Unix, PHP, ...) mais pas le C). Le plus simple dans ton cas est de retourner le choix de l'utilisateur (donc un char, qui vaudra 'a' ou 't') et selon cette valeur, faire des comparaisons en conséquence...

    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
    char Choix_Trie(void) {
      char choix = '\0';
      while ((choix != 'a')&&(choix != 't')) { /* Récursif ou pas, comme tu préfère... */
        scanf("%c", &choix); /* scanf convient pour lire un char */
      }
      return choix ;
    }
     
    [...]
     
      switch (Choix_Trie()) {
        case 'a':
          if(strcmp(courant->Auteur,suivant->Auteur)>0) { ... }
          break ;
        case 't':
          if(strcmp(courant->Titre,suivant->Titre)>0) { ... }
          break;
      }
    Bon, ca ca fonctionne, mais niveau évolutivité, c'est plutot bancale... Si ce programme est pour un TP, ca devrait être acceptable, mais pour une application qui devra évoluer, il vaudrait mieux définir des procédures de comparaisons dont l'adresse serait renvoyées par la fonction de choix du trie pour être utilisée avec un appel de qsort par exemple.

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  12. #12
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Vu que c'est pour un tp ça me suffit largement. Merci a toi!
    Par contre j'ai des erreurs que je ne comprends pas :
    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
    37
    38
    39
    40
    41
    42
    43
    Bibliotheque Trier(Bibliotheque *tete)
    {
    	char *choix;
    	Bibliotheque *courant=tete;
    	Bibliotheque *reference=tete;
    	while(courant!=NULL)
    	{
            switch (Choix_Trie()) /*ICI*/
            { 
                case 'a': 
                if(strcmp(courant->Auteur,reference->Auteur)>0)
                {
                    courant->droite=Trier(courant->droite); /*ICI*/
                }
                else
                {
                    if(strcmp(courant->Auteur,reference->Auteur)<0)
                    {
                        courant->gauche=Trier(courant->gauche);/*ICI*/
                    }
                    else
                        courant->droite=Trier(courant->droite);/*ICI*/
                }
                break ; 
                case 't': 
                if(strcmp(courant->Titre,reference->Titre)>0)
                {
                    courant->droite=Trier(courant->droite);/*ICI*/
                }
                else
                {
                    if(strcmp(courant->Titre,reference->Titre)<0)
                    {
                        courant->gauche=Trier(courant->gauche);/*ICI*/
                    }
                    else
                        courant->droite=Trier(courant->droite);/*ICI*/
                }
                break ;
            } 
        }
        return *courant;
    }
    Pour la premiere ça me retourne : switch quantity not an integer

    Pour toutes les autres : incompatible types in assignment

    Pourquoi?

  13. #13
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par BFH
    Vu que c'est pour un tp ça me suffit largement. Merci a toi!
    Par contre j'ai des erreurs que je ne comprends pas :
    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
    37
    38
    39
    40
    41
    42
    43
    Bibliotheque Trier(Bibliotheque *tete)
    {
    	char *choix;
    	Bibliotheque *courant=tete;
    	Bibliotheque *reference=tete;
    	while(courant!=NULL)
    	{
            switch (Choix_Trie()) /*ICI*/
            { 
                case 'a': 
                if(strcmp(courant->Auteur,reference->Auteur)>0)
                {
                    courant->droite=Trier(courant->droite); /*ICI*/
                }
                else
                {
                    if(strcmp(courant->Auteur,reference->Auteur)<0)
                    {
                        courant->gauche=Trier(courant->gauche);/*ICI*/
                    }
                    else
                        courant->droite=Trier(courant->droite);/*ICI*/
                }
                break ; 
                case 't': 
                if(strcmp(courant->Titre,reference->Titre)>0)
                {
                    courant->droite=Trier(courant->droite);/*ICI*/
                }
                else
                {
                    if(strcmp(courant->Titre,reference->Titre)<0)
                    {
                        courant->gauche=Trier(courant->gauche);/*ICI*/
                    }
                    else
                        courant->droite=Trier(courant->droite);/*ICI*/
                }
                break ;
            } 
        }
        return *courant;
    }
    Pour la premiere ça me retourne : switch quantity not an integer

    Pour toutes les autres : incompatible types in assignment

    Pourquoi?
    Parce que choix_trie envoi un char *. switch ne marche pas avec les chaines de caractere
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 101
    Points
    101
    Par défaut
    J'ai pas tout lu mais je crois que si tu écrit *Choix_Trie() dans ton switch ça va marcher

  15. #15
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Merci c'etait ça!
    Mais là j'en ai marre j'ai passé mon w-e dessus et ça ne fonctionne pas!

    Voila mon code complet :
    Definition de la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct livre
    {
    	char Titre[50];
    	char Auteur[20];
    	char MEdition[10];
    	int Annee;
    	int NbPages;
    	int Prix;
    	struct livre *gauche;
    	struct livre *droite;
    };
     
    typedef struct livre Bibliotheque;

    Fonction qui definie le type de tri qu'on va faire sur une bibliotheque :
    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
    char * Choix_Trie(void)
    {
    	char choix;
    	char caractere;
     
    	printf("Souhaitez vous effectuer un tri par Titre ou par Auteur (t/a) ?\n");
    	scanf("%c",&choix);
     
    	if (choix!='a' || choix!='t')
    	{
    		printf("Erreur de saisie de choix de trie !\n");
    		Choix_Trie();
        }
    	else
    	{
    		if (choix == 'a')
    			{
    			caractere='a';
    			}
    		if (choix == 't')
    			{
    			caractere='t';
    			}
    	}
    	return (caractere); /*Premiere ERREUR*/
    }
    Voila ma fonction qui trie la bibliotheque (en fonction du choix de trie qui est fait grace a la fonction Choix_Trie :
    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
    37
    38
    39
    40
    41
    42
    Bibliotheque Trier(Bibliotheque *tete)
    {
    	Bibliotheque *reference=tete;
    	Bibliotheque *nouveau=tete->droite;
    	switch(*Choix_Trie())
    	{
            while(reference!=NULL)
            { 
                case 'a': 
                if(strcmp(nouveau->Auteur,reference->Auteur)>0)
                {
                    reference->droite=Trier(nouveau);/*ERREUR*/
                }
                else
                {
                    if(strcmp(nouveau->Auteur,reference->Auteur)<0)
                    {
                        reference->gauche=Trier(nouveau);/*ERREUR*/
                    }
                    else
                        reference->droite=Trier(nouveau);/*ERREUR*/
                }
                break ; 
                case 't': 
                if(strcmp(nouveau->Titre,reference->Titre)>0)
                {
                    reference->droite=Trier(nouveau);/*ERREUR*/
                }
                else
                {
                    if(strcmp(nouveau->Titre,reference->Titre)<0)
                    {
                        reference->gauche=Trier(nouveau);/*ERREUR*/
                    }
                    else
                        reference->droite=Trier(nouveau);/*ERREUR*/
                }
                break ;
            } 
        }
        return *nouveau;
    }

    Parmi tout ce code je ne sais pas si mon arbre fonctionne reelement!

    De plus, j'ai plein d'erreur
    Premiere erreur [Warning] return makes pointer from integer without a cast

    Les autres : incompatible types in assignment

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 101
    Points
    101
    Par défaut
    Le problème c'est que ta fonction Choix-Trie retourne un CHAR alors que dans l'entête de ta fonction tu dis qu'elle retrourne un char *

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char Choix_Trie(void) {...}
    devrait aller mieux

    Par contre repasse à switch(Choix_Tri) du coup

    Il faut bien comprendre les pointeurs avavnt de les utiliser

  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par BFH
    Merci c'etait ça!
    Mais là j'en ai marre j'ai passé mon w-e dessus et ça ne fonctionne pas!

    Voila mon code complet :
    Definition de la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct livre
    {
    	char Titre[50];
    	char Auteur[20];
    	char MEdition[10];
    	int Annee;
    	int NbPages;
    	int Prix;
    	struct livre *gauche;
    	struct livre *droite;
    };
     
    typedef struct livre Bibliotheque;

    Fonction qui definie le type de tri qu'on va faire sur une bibliotheque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    char * Choix_Trie(void)
    {
    	char choix;
    	char caractere;
     
    	printf("Souhaitez vous effectuer un tri par Titre ou par Auteur (t/a) ?\n");
    	scanf("%c",&choix);
     
    	if (choix!='a' || choix!='t')
    	{
    		printf("Erreur de saisie de choix de trie !\n");
    		Choix_Trie();
    Un appel récursif ? En mesure tu bien tous les effets ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        }
    	else
    	{
    		if (choix == 'a')
    			{
    			caractere='a';
    			}
    		if (choix == 't')
    			{
    			caractere='t';
    			}
    	}
    	return (caractere); /*Premiere ERREUR*/
    Gné ? Si la fonction doit retourner un caractère, le type du retour doit être int et non adresse de char....
    Voila ma fonction qui trie la bibliotheque (en fonction du choix de trie qui est fait grace a la fonction Choix_Trie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Bibliotheque Trier(Bibliotheque *tete)
    {
    	Bibliotheque *reference=tete;
    	Bibliotheque *nouveau=tete->droite;
    	switch(*Choix_Trie())
    Et si elle retourne int, il suffit alors d'écrire
    Pas de Wi-Fi à la maison : CPL

  18. #18
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Merci a tous pour avoir passé beaucoup de temps sur mes bugs!
    Mention spéciale pour Emmanuel Delahaye Franchement merci a toi pour le temps que tu as du passer a lire et a corriger mes erreurs!

    Encore merci a tous!

    Note: oui j'ai bien mesuré ce que faisait la recurence de la fonction Choix_Trie : Si qq rentre une lettre innapropriée ça lui retourne un message d'erreur et ça lui demande de re rentrer soit 'a' soit 't'.

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par BFH
    Note: oui j'ai bien mesuré ce que faisait la recurence de la fonction Choix_Trie : Si qq rentre une lettre innapropriée ça lui retourne un message d'erreur et ça lui demande de re rentrer soit 'a' soit 't'.
    Je te parles d'appel récursif, pas de récurrence... Personellement, je traite ce genre de problème en itératif. La récursion mal maitrisée, c'est dangereux... Il faut aussi voir quelle sera la valeur réellement retournée en cas d'erreur... La récursion, c'est une certaines façon de raisonner... Parfois, ça surprend...
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. Port comm pour débutant
    Par carotreger dans le forum Débuter
    Réponses: 11
    Dernier message: 03/11/2005, 00h19
  2. Réponses: 2
    Dernier message: 17/10/2005, 22h16
  3. aide petit programme pour débutant
    Par kartp0rqx dans le forum C
    Réponses: 16
    Dernier message: 14/10/2005, 19h31
  4. Aide pour débutant : addition
    Par playentry dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/03/2005, 19h08

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