Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème d'exécution

Le cas ou le nom n'existe pas ne se traite pas!

    27 mars 2017 à 14:23:57

    Bonjour, 

    j'ai programmé une fonction qui nous cherche l'indice d'un nom dans un tableau, le problème c'est que quand le nom existe dans le tableau ça marche, mais quand ça n'existe pas le programme s'arrete et se bloque.

    j'ai besoin de votre aide svp.

    Je vous remercie d'avance.

    typedef struct Tab Tab;
        struct Tab {
                char nom[20];
                char adresse [20];
                int psk;
        };
    //*****************************************************//
    
    int cherchskieur(char nomch[25], Tab tableau[])
    {
      int i=1, nsk;
      while ((i <= nsk) && (strcmp(tableau[i].nom, nomch)!= 0))
      {
          i ++;
      }
      if (i> nsk)
      {
          i= 0;
      }
          return i;
    }
    
    //****************************************************//
    
    void main()
    {
      char nomh[20];
      int n,i,ind;
      printf("Donner le nombre de nom à insérer."); //La construction du tableau//
      scanf("%d", &n);
      Tab Skieur[n];
      for (i=1; i<=n; i++)
      {
          printf("Le nom de skieur %d est: ",i);
          scanf("%s", Skieur[i].nom);
      }
      printf("\n Donner le nom q vous cherchez. \n\n");
      scanf("%s",nomh );
      //---------------Appel à la fonction------------------//
      ind = cherchskieur(nomh, Skieur);
      if (ind== 0)
      {
          printf("Le nom que vous cherchez n'existe pas.");
      }
      else
      {
          printf("l'indice est: %d",ind);
      }
    }
    



    -
    Edité par RoseJack 27 mars 2017 à 14:25:31

    • Partager sur Facebook
    • Partager sur Twitter
      27 mars 2017 à 14:27:38

      Bonjour,

      et nsk est initialisé quand ? à quelle valeur ? En utilisant un debuger tu aurais vite vu (même en ne tenant pas compte des warnings émis par ton compilo) que tu dépasses la fin de ton tableau …

      Par curiosité si l'élément cherché est en position 0, que se passe-t-il ?

      • Partager sur Facebook
      • Partager sur Twitter
      First solve the problem. Then, write the code. ~ John Johnson
        27 mars 2017 à 14:31:10

        pour le nsk c'est le ''n'' du main, c'est le nombre de nom.

        quant à la position 0, j'ai fait en sorte que les indices du tableau commencent à 1 

        while (i=1, i<= n, i++)
        • Partager sur Facebook
        • Partager sur Twitter
          27 mars 2017 à 14:34:50

          RoseJack a écrit:

          pour le nsk c'est le ''n'' du main, c'est le nombre de nom.

          pas dans ton code

          RoseJack a écrit:

          quant à la position 0, j'ai fait en sorte que les indices du tableau commencent à 1 

          while (i=1, i<= n, i++)

          En général : très mauvaise idée. Déjà tu alloues un VLA (pas grave en soi) mais bon ... un tableau de longueur n aura ses indices de 0 à n-1, si tu veux aller de 1 à n alors il faut allouer un tableau de n+1 cases.



          • Partager sur Facebook
          • Partager sur Twitter
          First solve the problem. Then, write the code. ~ John Johnson
            27 mars 2017 à 14:37:49

            Vous me conseillez à initialiser le nsk à quoi?

            et pour la fonction "cherchskieur" est ce que je mettrais le "return i" dans le if et en sortant aussi? ( pour le if je metterais i= -1)

            -
            Edité par RoseJack 27 mars 2017 à 14:39:42

            • Partager sur Facebook
            • Partager sur Twitter
              27 mars 2017 à 14:45:41

              En C il y a une règle simple : à partir du moment où tu donnes un tableau à une fonction, tu ne pourras pas déterminer le nombre d'éléments de ce tableau dans la fonction → il faut le passer en paramètre. Évidemment tu pourrais avoir un élément spécial pour marquer la fin à l'instar du zéro terminal des chaînes …

              Et oui, si tu ne trouves pas le skieur alors tu renvoies -1, sinon l'index du skieur.

              • Partager sur Facebook
              • Partager sur Twitter
              First solve the problem. Then, write the code. ~ John Johnson
                27 mars 2017 à 14:49:15

                Oui ça marche super, merci infiniment PicoDev ^^
                • Partager sur Facebook
                • Partager sur Twitter

                problème d'exécution

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown