Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ou est le problème dans mon code ? ^o)

Sujet résolu
    16 août 2006 à 23:35:13

    Bonjour bonjour tous le monde !
    Je suis tout nouveau dans votre site et je n'ai qu'une chose à dire : Bravo et Félicitation pour tout vos tutos et pour tous ceux qui dédiquent leur temps à partager leur savoir. Ca fait plaisir ;).

    Maintenant... j'ai un problème ! je suit le tuto de notre ami Mateo, j'ai déjà vu 2 chapitres mais j'ai décidé de retourner au chapitre 1 histoire de bien comprendre ce que je fesais avant d'attaquer nos amis les pointeurs et tableaux,etc ... voici le code mon programme, désolée de n'avoir pas mis de commentaires.

    1er problème:
    Lorsque l'on joue, directement aprés avoir mis le numéro; on a : congratulations ! :o bizarre ? et le jeu suit son cours ...
    2ème problème:
    Les prototypes des fonctions, j'ai tout mis dans un seule fichier, est-ce que c'est juste ?
    3ème problème:
    Etant donné que j'étudi au Venezuela (Ile de Margarita) j'ai fait le programme en Anglais pour permettre a mes amis d'ici et de la France de comprendre. Tout simplement.
    Ce qui suit : main.c (plus bas je mettrais prototype.h)

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include "prototypes.h"

    int main()
    {
            switch (menu1())
            {
                case 1:
                switch (menu2())
                    {
                        case 1:
                         {
                              float total = 0.0, number_1 = 0.0, number_2 = 0.0;
                              total = number_1 * number_2;
                              printf("\\n\\n");
                              printf("Put your first number: \\n\\n");
                              scanf("%lf",&number_1);
                              printf("\\n\\n");
                              printf("Now, put your second number: \\n\\n");
                              scanf("%lf",&number_2);
                              printf("\\n");
                              printf("%lf * %lf = %lf\\n", number_1, number_2, total);
                         }
                        break;
                        case 2:
                         {
                              float total = 0.0, number_1 = 0.0, number_2 = 0.0;
                              total = number_1 + number_2;
                              printf("\\n\\n");
                              printf("Put your first number: \\n\\n");
                              scanf("%lf",&number_1);
                              printf("\\n\\n");
                              printf("Now, put your second number: \\n\\n");
                              scanf("%lf",&number_2);
                              printf("\\n");
                              printf("%lf + %lf = %lf\\n", number_1, number_2, total);
                         }
                        break;
                        case 3:
                         {
                              float total = 0.0, number_1 = 0.0, number_2 = 0.0;
                              total = number_1 - number_2;
                              printf("\\n\\n");
                              printf("Put your first number: \\n\\n");
                              scanf("%lf",&number_1);
                              printf("\\n\\n");
                              printf("Now, put your second number: \\n\\n");
                              scanf("%lf",&number_2);
                              printf("\\n");
                              printf("%lf - %lf = %lf\\n", number_1, number_2, total);
                         }
                        break;
                        case 4:
                         {
                              float total = 0.0, number_1 = 0.0, number_2 = 0.0;
                              total = number_1 / number_2;
                              printf("\\n\\n");
                              printf("Put your first number: \\n\\n");
                              scanf("%lf",&number_1);
                              printf("\\n\\n");
                              printf("Now, put your second number: \\n\\n");
                              scanf("%lf",&number_2);
                              printf("\\n");
                              printf("%lf / %lf = %lf\\n", number_1, number_2, total);
                         }
                       break;
                       default:
                              printf("\\n\\n");
                              printf("I don't know this number!\\n\\n");
                    }
                break;

                case 2:
                    {
                        switch (menu3())
                            {
                                case 1:
                                    {
                                        int number_wrote = 0;
                                        int number_mysterious = 0;
                                            do
                                                {
                                                        const int MAX = 100, MIN = 1;
                                                        srand(time(NULL));
                                                        number_mysterious = (rand() % (MAX - MIN + 1)) + MIN;
                                                        printf("\\n\\n");
                                                        printf("What's the number? \\n\\n");
                                                        scanf("%ld",&number_wrote);
                                                        printf("\\n\\n");
                                                    if (number_mysterious > number_wrote)
                                                        printf("It's more! ");
                                                    else if (number_mysterious < number_wrote)
                                                        printf("It's less! ");
                                                    else
                                                        printf("\\n\\n");
                                                        printf ("Congratulations!, you have discovered the mysterious number! ");
                                                } while (number_wrote != number_mysterious);
                                    }
                                break;
                                case 2:
                                    {
                                        int number_wrote = 0;
                                        int number_mysterious = 0;
                                            do
                                                {
                                                        const int MAX = 1000, MIN = 1;
                                                        srand(time(NULL));
                                                        number_mysterious = (rand() % (MAX - MIN + 1)) + MIN;
                                                        printf("\\n\\n");
                                                        printf("What's the number? \\n\\n");
                                                        scanf("%ld", &number_wrote);
                                                        printf("\\n\\n");
                                                    if (number_mysterious > number_wrote)
                                                        printf("It's more! ");
                                                    else if (number_mysterious < number_wrote)
                                                        printf("It's less! ");
                                                    else
                                                        printf("\\n\\n");
                                                        printf ("Congratulations!, you have discovered the mysterious number! ");
                                                } while (number_wrote != number_mysterious);
                                    }
                                break;
                                case 3:
                                    {
                                        int number_wrote = 0;
                                        int number_mysterious = 0;
                                            do
                                                {
                                                        const int MAX = 10000, MIN = 1;
                                                        srand(time(NULL));
                                                        number_mysterious = (rand() % (MAX - MIN + 1)) + MIN;
                                                        printf("\\n\\n");
                                                        printf("What's the number? \\n\\n");
                                                        scanf("%ld",&number_wrote);
                                                        printf("\\n\\n");
                                                    if (number_mysterious > number_wrote)
                                                        printf("It's more! ");
                                                    else if (number_mysterious < number_wrote)
                                                        printf("It's less! ");
                                                    else
                                                        printf("\\n\\n");
                                                        printf ("Congratulations!, you have discovered the mysterious number! ");
                                                } while (number_wrote != number_mysterious);
                                }
                break;
                default:
                    printf("??? Why a number who's not here?");
            }

    }
    }

    }

    et maintenant : prototype.h

    int menu1()
    {
        int choice_menu1 = 0;
          do
           {
                printf("|chris'program|\\n");
                printf("===============\\n\\n");
                printf("1 | Calculator\\n");
                printf("_____________________\\n\\n");
                printf("2 | The game !\\n\\n");
                printf("What do you want to do ? ");
                scanf("%ld",&choice_menu1);
            } while (choice_menu1 > 2 && choice_menu1 == 0);

        return choice_menu1;
    }

    int menu2()
    {
       int choice_menu2 = 0;
         do
            {
                printf("\\n\\n");
                printf("What do you want to do now ?\\n\\n");
                printf(" 1. *\\n");
                printf(" 2. +\\n");
                printf(" 3. -\\n");
                printf(" 4. /\\n\\n");
                printf("you have put: ");
                scanf("%ld",&choice_menu2);
            } while (choice_menu2 > 4 && choice_menu2 == 0);

       return choice_menu2;
    }

    int menu3()
    {
        int choice_menu3 = 0;
          do
             {
                 printf("\\n\\n");
                 printf("|Difficulty|\\n");
                 printf("============\\n\\n");
                 printf("1. Easy ! \\n");
                 printf("2. Medium ! \\n");
                 printf("3. Hard ! \\n\\n");
                 printf("you have put: ");
                 scanf("%ld",&choice_menu3);
             } while (choice_menu3 > 3 && choice_menu3 == 0);

        return choice_menu3;
    }


    Je suis débutant je vous le rapelle. Merci pour votre temps et pour vos conseils d'avance.

    PS: Encore désolé pour ce long code et encore bravo pour ce site.
    • Partager sur Facebook
    • Partager sur Twitter
      17 août 2006 à 0:04:18

      Salut !
      Bon, j'ai pas vraiment lus ton code, mais y a un truc bizard. Dans prototypes.h, il n'y a pas des prototypes, mais des fonctions !

      Prototype de menu1():
      int menu1();


      fonction menu 1:
      int menu1()
      {
          int choice_menu1 = 0;
            do
             {
                  printf("|chris'program|\\\\n");
                  printf("===============\\\\n\\\\n");
                  printf("1 | Calculator\\\\n");
                  printf("_____________________\\\\n\\\\n");
                  printf("2 | The game !\\\\n\\\\n");
                  printf("What do you want to do ? ");
                  scanf("%ld",&choice_menu1);
              } while (choice_menu1 > 2 && choice_menu1 == 0);

          return choice_menu1;
      }
      • Partager sur Facebook
      • Partager sur Twitter
        17 août 2006 à 1:50:07

        Salut korry ! :lol:

        Dans prototype.h je ne devrais mettre que int menu1() (donc les prototypes des fonctions) non ?
        et j'apelle la fonction dans main.c ? ou dois-je créer un prototype.c et mettre les fonctions dedans et les prototypes dans prototypes.h ou ... je ne comprends pas vraiment, aurais-tu un exemple concret s'il te plaît ?

        <information></information> En tout cas merci pour ta réponse. :)
        • Partager sur Facebook
        • Partager sur Twitter
          17 août 2006 à 2:25:20

          • Dans les .h tu déclares tes fonctions :


          fonctions.h

          #ifndef FCT_H
          #define FCT_H
          void mafonction(int a);
          int mafonction2(void);
          #endif


          • Dans les .c (avec un nom qui correspond au .h si possible) tu défini les fonctions :


          fonctions.c

          #include "fonctions.h"
          void mafonction(int a){
              printf("%d", a);
          }
          int mafonction2(void){
              return 1;
          }


          • Et dans le main tu utilises ces fonctions :


          #include "fonctions.h"

          int main(void){
          mafonction(mafonction2());
          return 0;
          }


          Plus d'information en suivant ce lien : http://www.siteduzero.com/tuto-3-4200-1-le-preprocesseur.html
          • Partager sur Facebook
          • Partager sur Twitter
            17 août 2006 à 4:54:44

            la raison pour laquelle tu as le message de felicitations des le debut est la suivante:
            les accollades sont facultatives dans un cas TRES precis:

            quelle est la syntaxe des instructions if et else?



            if
                instruction
            else
                instruction


            Il n'y a pas d'"s" à instruction.


            Les accolades qui forment un bloc d'instructions sont considérées comme une seule instruction.

            {
                instruction1
                instruction2
                instruction3
                .
                .
                .
                instructionN
            }


            Le code ci-dessus sera considéré comme une et une seule instruction car toutes les instructions sont comprises dans UN bloc.


            Désolé d'avoir trop appuyé là dessus.

            maintenant, quand tu fais
            else
                printf("\n\n");
                printf ("Congratulations!, you have discovered the mysterious number! ");

            il n'y a que le premier printf qui soit soumis au else, le deuxieme n'etant simplement que la suite logique du programme.
            voilà à quoi correspond ton code
            else
                {
                    printf("\n\n");
                }
            printf ("Congratulations!, you have discovered the mysterious number! ");


            Cordialement,
            Nigel
            • Partager sur Facebook
            • Partager sur Twitter
              17 août 2006 à 6:48:15

              Nigel, j'ai compris mon erreur, en résumé :
              - Si il n'y a qu'une seule "phrase" les accolades sont facultatives et il la considère comme une instruction donc tout est normal

              else
                 printf("coucou");

              sa reviens a ça =>


              else
                {
                   printf("coucou");
                }

              - Si il y'a plusieurs "phrases" les accolades sont obligatoires car lui il va lire seulement 1 instructions et non plusieurs, donc :


              else
                 printf("\\n\\n");
                 printf("coucou!");


              se lit comme ça =>


              else
                 {
                    printf("\\n\\n);
                 }
              printf("
              coucou");
               


              Donc c'est pas bon !
              et il faut faire comme ça =>


              else
                 {
                    printf("\\n\\n");
                    printf("coucou!");
                 }


              Merci nigel pour ton aclaration encore est-il qu'il faut que ce que j'ai dit soit vrai!
              Mais je ne comprends toujours pas pourquoi sa redirigeait directement sur else(juste pour cette histoire d'instruction ?) ^o)

              Bonsoir, ou bonjour ( :-° ) Lexou !
              Il y'a donc 3 étapes ! est-ce bien ça ?

              Prototypes.h => les prototypes des fonctions
              Prototypes.c => on définit les fonctions
              main.c => on fait appel à elles

              est-ce juste ?; aprés il ne suffit que d'inclure prototypes.h et prototypes.c dans les 3 non ?

              Merci à toi.
              • Partager sur Facebook
              • Partager sur Twitter
                17 août 2006 à 6:54:34

                Oui tu as bien compri pour la syntaxe du if.
                Pout tes fichiers tu fais exactement comme à dit lexou. Donc tes 3 étaps sont correctes par contre ta phrase suivante me fait un peu peur.
                En effet il ne faut jamais inclure un .c dans un autre, tu ne dois inclure que des .h
                Donc là tu inclu prototypes.h dans tes deux .c mais pas prototypes.c dans main.cet ce sera bien.
                • Partager sur Facebook
                • Partager sur Twitter
                  17 août 2006 à 7:14:40

                  en gros, ton programme fait

                  if (number_mysterious > number_wrote)
                  {
                      printf("It's more! ");
                  }
                  else if (number_mysterious < number_wrote)
                  {
                      printf("It's less! ");
                  }
                  else
                  {
                      printf("\\\\n\\\\n");
                  }
                  printf ("Congratulations!, you have discovered the mysterious number! ");


                  c'est à dire que quelque soit les conditions verifiées dans ton if else..., il passera FORCEMENT par
                  printf ("Congratulations!, you have discovered the mysterious number! ");

                  voilà, je n'arrive pas à etre plus clair... desolé
                  bonne chance pour la suite :)

                  Cordialement,
                  Nigel
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 août 2006 à 19:38:36

                    :) Merci pour votre aide, le sujet est désormais clos et résolu ;)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Ou est le problème dans mon code ? ^o)

                    × 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