Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Problème quand j'utilise des fonctions

    31 janvier 2006 à 19:56:39

    Salut à tous

    Suite à une recherche de petit programme à réaliser, j'ai décidé de faire un ascenseur virtuel :D
    Le principe est simple : l'utilisateur rentre l'étage où il est, l'ascenseur s'y rend, puis l'utilisateur rentre l'étage où il veut aller, et l'ascenseur s'y rend ^^

    Mon code marche nickel, sauf quand j'utilise des fonctions :(
    Je pense que je m'y prend mal au niveau des pointeurs, mais je n'arrive pas à trouver l'erreur :\

    Voici donc mon code :

    #include <stdio.h>
    #include <stdlib.h>

    int appel (int *appele);
    int aller (int *atteindre);
    int deplacement (int *etage, int *appele);

    int main(int argc, char *argv[])
    {
      /* Ascenseur V.1
      Réalisé par NainTernaute */

     
      int etage = 0;
      int appele = 0;
      int atteindre = 0;
     
      printf("Bienvenue dans l'ascenseur virtuel ! \n");
      printf("Amusez vous bien \n");
     
      printf("L'ascenseur est actuellement a l'etage %d\n", etage);

      appel(&appele);

      printf("L'ascenseur arrive ... \n");
     
      deplacement(&etage, &appele);
       
        printf("L'ascenseur est a votre etage \n");
       
        aller(&atteindre);
       
        printf("On y va !\n");
       
        if (etage < atteindre) {
              do {
                   etage++;
                   sleep (1000);
                   printf("L'ascenseur est a l'etage %d\n", etage);
                 } while (etage != atteindre);
            }
        else if (etage > atteindre) {
             do {
                 etage--;
                 sleep (1000);
                 printf("L'ascenseur est a l'etage %d\n", etage);
                 } while (etage != atteindre);
                 }
        printf("Vous etes arrives \n");
       
     
      system("PAUSE");     
      return 0;
    }

    int appel (int *appele) {
          printf("Depuis quel etage voulez-vous l'appelez ?");
          scanf("%d", appele);
          return *appele;
     }
     
    int aller (int *atteindre) {
        printf("A quel etage voulez-vous aller ?");
        scanf("%d", atteindre);
        return *atteindre;
    }

    int deplacement (int *etage, int *appele) {
         if (*etage < *appele) {
              do {
                   *etage++;
                   sleep (1000);
                   printf("L'ascenseur est a l'etage %d\n", *etage);
                 } while (*etage != *appele);
            }
        else if (*etage > *appele) {
             do {
                 *etage--;
                 sleep (1000);
                 printf("L'ascenseur est a l'etage %d\n", *etage);
                 } while (*etage != *appele);
                 }
    }


    Les fonctions marchent, sauf celle nommée deplacement o_O
    J'ai le droit à des nombres du style "23546" :\

    Par contre, quand je fais sans fonction, le deplacement marche nickel (bien sur j'enlève tous les pointeurs)

    Merci d'avance de votre future aide.

    ++
    • Partager sur Facebook
    • Partager sur Twitter
      31 janvier 2006 à 20:35:20

      Je me suis pas vraiment penché dessus (ce soir suis un peu fatigué... dsl) m'enfin un conseil : quand t'as une erreur, affiche tous les nombres suspects, ça devrait te permettre de cibler sur la variable qui fait défaut.

      J'essayerais de m'y atteler m'enfin bon je m'appelle pas rz0 alors je promet rien...

      ++ !
      • Partager sur Facebook
      • Partager sur Twitter
        31 janvier 2006 à 20:35:47

        > J'ai le droit à des nombres du style "23546" :\
        Où ? Quelle valeur, quelle variable ?
        Sinon moi je vois pas de bug particulier, juste un détail mineur sur le fait que tu incrémentes avant d'afficher.

        Sinon, ya plein de pointeurs qui ne servent à rien. Les pointeurs c'est idiomatique mais faut pas en abuser.
        • Partager sur Facebook
        • Partager sur Twitter
          31 janvier 2006 à 20:38:31

          (*etage)++;
          et
          (*etage)--;
          C'est la valeur pointée qu'on incrémente, pas l'adresse pointée ;)
          Question de priorité des opérateurs...
          • Partager sur Facebook
          • Partager sur Twitter
            31 janvier 2006 à 20:42:12

            Erf, ça m'apprendra à avoir les yeux pervertis par le parcours avec pointeurs. :x
            C'est tellement courant de voir *p++ que j'avais même pas tilté, my bad... Par contre, à propos de ça, utilise plutôt ++*etage, ça sera plus lisible.
            • Partager sur Facebook
            • Partager sur Twitter
              31 janvier 2006 à 20:46:32

              Ah oui, j'avais pas pensé à ça :\

              Merci Elentar ça marche maintenant :)

              rzo >> je vois pas vraiment où je pourrais enlever des pointeurs, j'ai essayé d'en enlever certains, à chaque fois ça ne marche plus :\ Tu pourrais m'éclairer stp ?
              • Partager sur Facebook
              • Partager sur Twitter

              [C] Problème quand j'utilise des fonctions

              × 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