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 :

Probleme avec une fonction trouverCommande


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Par défaut Probleme avec une fonction trouverCommande
    Bonjour
    Je dois etablir une fonction qui permet de trouver une commande dans un dictionnaire de commande deja charger dans une liste
    je vous donne mon code :
    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
    int trouverCommandes(TListe  pliste, char cmdSaisie[],TProcessus  * proc)
    {
    	int vrai=0;
    	TListe tmp;
    	tmp = pliste;
    	while(((tmp.tete)!=NULL)&&(vrai!=1)) //On parcours toute la liste tant que la commande n'est pas trouvé grace a la variable vrai
    	{
    		if(strcmp((tmp.tete)->information.nomCmd,cmdSaisie)==0) //Si la commande dans la liste est egal à la commande saisie par l'user alors la commande a été trouvé 
    		{
    			vrai=1;
    		}
    		else
    		{
                            tmp.tete=tmp.tete->suivant; // sinon on continue a chercher tant que l'adresse de la cellule n'est pas null et que notre commande n'est pas trouvé
    		}
    	}
    	printf("ok"); // c'est ici que ça bug quand quand ma commande n'est pas trouvé
    	if(vrai!=0) // if ma commande a été trouvé alors on affiche la validation
    	{
    	    printf("ok");
    	    printf("\n\n              -----------------------------------------------");
    		printf("\n               La commande est dans le dictionnaire de donnee\n");
    		printf("              -----------------------------------------------\n\n");
    		printf("\nSyntaxe de la commande %s est :",(cmdSaisie));
    		Color(12,0);
    		printf(" %s\n",((tmp.tete)->information.syntaxe));
    		Color(15,0);
    		strcpy((*proc).libelle,cmdSaisie);
        }
        else //sinon (il y passe jamais) on affiche l'erreur
        {
    	    printf("ok");
    		printf("\nLa commande n'est pas dans le dictionnaire de donnee \n");
        }
     
    return vrai ;
    }
    Donc comme vous avez pu le voir dans les commentaires du code, quand ma commande est trouvé tout marche très bien, mais quand ma commande n'est pas trouvé, il bug, j'ai meme remarquer qu'il ne sort pas de la boucle d'ou mon printf("ok"); apres la boucle while !
    Je ne vois pas en quoi l'algo est faux, j'aimerais savoir pourquoi l'algo serait faux !

    Je vous remercie d'avance

    Cordialement

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 33
    Par défaut
    Question stupide mais s'il ne sort jamais de la boucle, c'est que le gardien ne devient jamais faux. La variable 'vrai' n'étant jamais modifiée dans le cas où la commande n'existe pas, il reste plus que tmp.tete qui n'est jamais null. D'où ma question: l'élément qui suit le dernier élément est-il bien initialisé à null?

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Par défaut
    Bah voici l'insertion des commandes dans la liste, elle me semble bonne :
    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
    TListe inserer (TListe * pliste, int prg, uneCommande * pcmd)
    {
        TListe tmp, tmp2;
        TCellule * nc = NULL;
        int i = 0;
        tmp = *pliste;
        nc = (TCellule*)malloc(sizeof(TCellule));
        nc->information = (*pcmd);
        if (prg == 1)
        {
          nc->suivant = tmp.tete;
          tmp.tete = nc;
          tmp2 = tmp;
        }
        else
        {
            tmp2 = tmp;
            for (i=0; i<((prg)-2); i++)
            {
                tmp.tete = tmp.tete->suivant;
     
            }
            nc->suivant = tmp.tete->suivant;
            tmp.tete->suivant = nc;
        }
        return tmp2;
    }

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Par défaut
    J'ai trouvé, je vous remercie beaucoup, en effet apres la boucle for dans mon inserer, j'attribue a nc->suivant=NULL et tmp.tete->suivant=nc clairement


    Merci beaucoup

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/09/2006, 11h06
  2. Réponses: 7
    Dernier message: 16/08/2006, 10h55
  3. [C#] probleme avec une fonction recursive
    Par K_!!! dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/08/2006, 18h22
  4. probleme avec une fonction enable() toute simple !!
    Par K_!!! dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/05/2006, 15h10
  5. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

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