Partage
  • Partager sur Facebook
  • Partager sur Twitter

Révision Chapitre 1

Sujet résolu
    3 décembre 2006 à 22:26:05

    Bonjour.
    J'ai décidé de faire une petite révision de chapitre 1 en créant un mini jeu. Je voulais l'essayer mais il ne marche pas, il me dit qu'il y a une erreure à la dernière ligne (celle qui n'a que le }). Voici le fichier : http://harakna.site.voila.fr/main.c

    S'il vous plaît, aidez-moi.
    Merci d'avance

    PS : En même temps pouvez-vous vérifier si ma boucle est correcte ?
    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2006 à 22:34:26

      Je parie que ton "erreur" est seulement un warning "no newline at end of file" ou quelque chose comme ça... je me trompe ? si c'est le cas, tu as juste à rajouter un saut de ligne tout à la fin.

      Et aussi, soit tu postes ton code sur le SdZ avec les balises appropriés pour le colorer, soit tu utilises un wall (comme rafb.net/paste), parce que là c'est lourd à lire...
      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2006 à 22:35:38

        il te sort quoi comme erreur ?
        • Partager sur Facebook
        • Partager sur Twitter
          3 décembre 2006 à 22:36:39

          Non, je penses que c'est à cause du do....while qui ne se termine pas ;)
          • Partager sur Facebook
          • Partager sur Twitter
            3 décembre 2006 à 22:38:25

            Non j'ai mon saut de ligne.

            Mon erreur c'est :
            Error : syntax error before } token

            Comment sa mon do... while sa termine pas ?
            • Partager sur Facebook
            • Partager sur Twitter
              3 décembre 2006 à 22:41:11

              Syntaxe:


              do
              {
              /*....*/
              }while(truc<=bidule);
              • Partager sur Facebook
              • Partager sur Twitter
                3 décembre 2006 à 22:43:14

                Citation : kouaygon

                Syntaxe:


                do
                {
                /*....*/
                }while(truc<=bidule);


                Heu...c'est pas sa j'ai fais ?

                            case 5:
                                while (VieEnnemi == 2);
                                break;
                • Partager sur Facebook
                • Partager sur Twitter
                  3 décembre 2006 à 22:45:18

                  Gloups, tu me poses une colle! Mais perso, je doutes que ça marche.
                  Tu peux pas faire

                  do
                  {
                  /*...*/
                  }while(vieEnnemi>=2);//Tant qu'il reste de la vie à l'ennemi, sinon, on a gagnée ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 décembre 2006 à 22:47:01

                    J'ai essayé avec if... else mais ça marchait pas nonplus.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 décembre 2006 à 22:48:28

                      Sa marche pas se que j'ai mis?!
                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 décembre 2006 à 22:49:27

                        Sa à l'air beau merci mais j'ai encore la même erreure que tantôt.

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

                        int main(int argc, char *argv[])
                        {
                            unsigned char NombreDeVie = 5, VieEnnemi = 5, Attaque = NULL;
                            printf("Vous etes attaquer !");

                            do
                            {
                                printf("Entrez un nombre de 1 a 5 pour savoir de combien vous attaquez :");
                                scanf("%ld", &Attaque);

                                switch (Attaque)
                                {
                                    case 1:
                                        VieEnnemi = VieEnnemi - 1;
                                        printf("Vous faites 1 de degats a votre adversaire. Il ne lui reste plus que %ld points de vies.", VieEnnemi);
                                        break;
                                    case 2:
                                        printf("Vous manquez votre adversaire.");
                                        break;
                                    case 3:
                                        VieEnnemi = VieEnnemi - 2;
                                        printf("Vous frappez de plein fouet votre adversaire. Il perd 2 de vie. Il ne lui en reste que %ld.", VieEnnemi);
                                        break;
                                    case 4:
                                        printf("Vous manquez votre adversaire.");
                                        break;
                                    case 5:
                                        printf("Vous manquez votre adversaire.");
                                        break;
                                    default:
                                        printf("Vous n'avez pas entre un chiffre correct.");
                                        break;
                                }

                                while (VieEnnemi <= 0)

                                printf("Vous avez tuer votre adversaire. Bravo !!\n");
                            }
                        } //error : syntax error before } token

                        • Partager sur Facebook
                        • Partager sur Twitter
                          3 décembre 2006 à 23:55:01

                          ton while() est mal placé !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 décembre 2006 à 0:28:13

                            Citation : Harakna

                            S'il vous plaît, aidez-moi.


                            Et tu compilais avant de poster ?

                            Compiling: main.c
                            main.c: In function `main':
                            main.c:6: warning: initialization makes integer from pointer without a cast
                            main.c:12: warning: long int format, different type arg (arg 2)
                            main.c:18: warning: long int format, int arg (arg 2)
                            main.c:25: warning: long int format, int arg (arg 2)
                            main.c:62: error: syntax error before '}' token
                            main.c:6: warning: unused variable `NombreDeVie'
                            main.c: At top level:
                            main.c:4: warning: unused parameter 'argc'
                            main.c:4: warning: unused parameter 'argv'
                            Process terminated with status 1 (0 minutes, 2 seconds)
                            1 errors, 7 warnings

                            et profites-en pour apprendre à configurer ton compilateur correctement...

                            http://mapage.noos.fr/emdel/codage.htm#cfg_compilo
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Music only !
                              4 décembre 2006 à 0:55:12

                              1 - Le type char est réserver aux caractères.

                              2 - Si tu as suivi le cours de M@teo21 le nom d'une variable commence par une lettre minuscule.

                              3 - Ton do ... while est incorrect, il manque le ';' après le while (ton erreur de syntaxe doit venir de la ...) .

                              4 - Ta condition est pas bonne.
                              Tu devrais mettre vieEnnemi > 0 et non pas vieEnnemi <= 0 .

                              Kurapix
                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 décembre 2006 à 1:39:21

                                Kurapix a raison en tout point , cependant je voudrais ajouter qu'une variable ne doit pas forcément commencer par une minuscule , c'est juste une question d'organisation mais tu devrais suivre le conseil ;)
                                Je me permet de te rapeller la syntaxe d'un do while :

                                do // faire
                                {
                                // instructions //
                                }
                                while(condition); // tant que la condition est vraie



                                Tu comprends donc la remarque de Kurapix sur ta condition , on continue tant que ton ennemi est vivant , donc tant que vieEnnemi > 0 ;)

                                Enfin , si tu es décidé a utiliser un type non signé (unsigned) , n'oublis pas que les nombres négatifs n'existant pas , tu ne dois pas toujours enlever 2 !

                                Par exemple si ton ennemi a 1 de vie , et que tu appuies sur la touche 3 , tu lui enleves 2 , et 1-2 = -1 .
                                Les nombres négatifs n'existant pas , ta variable va se voir attribuer la valeur 4294967295 ! Pourquoi ? :euh:

                                Je te renvois au cours de matheo , un unsigned int stocke des nombre de 0 à 4 294 967 295 . :lol:
                                En langage bébé , une fois arrivé à zero il fait le tour et revient à 4 294 967 295 :p !
                                Bref comme 4294967295 est bien superieur à 0 , ta condition sera toujours vraie , et ton ennemi ne sera pas mort :colere2:

                                Tu Peux donc utiliser le code suivant pour ton cas Attaque = 3 .


                                case 3:
                                   if(VieEnnemi>=2)
                                   VieEnnemi = VieEnnemi - 2; // on enleve 2 seulement si la vie de ton ennemi est superieur ou egale à 2
                                   else
                                   VieEnnemi = 0; // sinon ( donc si sa vie est egale à 1 ) , on met sa vie à zero !
                                   printf("Vous frappez de plein fouet votre adversaire. Il perd 2 de vie. Il ne lui en reste que %ld.\n", VieEnnemi);
                                   break;
                                   case 4:


                                J'espere que tu as compris :p

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  4 décembre 2006 à 1:57:06

                                  Y'a déjà eu beaucoup de réponses, et j'imagine que ma solution a déjà été dite :

                                  main retourne un int, hors il n'y a pas de return 0 à la fin du main.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    4 décembre 2006 à 21:37:14

                                    De plus, tu initialise un unsigned int à NULL au lieu de 0.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      4 décembre 2006 à 23:20:17

                                      Citation : -ed-

                                      Citation : Harakna

                                      S'il vous plaît, aidez-moi.


                                      Et tu compilais avant de poster ?


                                      Compiling: main.c
                                      main.c: In function `main':
                                      main.c:6: warning: initialization makes integer from pointer without a cast
                                      main.c:12: warning: long int format, different type arg (arg 2)
                                      main.c:18: warning: long int format, int arg (arg 2)
                                      main.c:25: warning: long int format, int arg (arg 2)
                                      main.c:62: error: syntax error before '}' token
                                      main.c:6: warning: unused variable `NombreDeVie'
                                      main.c: At top level:
                                      main.c:4: warning: unused parameter 'argc'
                                      main.c:4: warning: unused parameter 'argv'
                                      Process terminated with status 1 (0 minutes, 2 seconds)
                                      1 errors, 7 warnings


                                      et profites-en pour apprendre à configurer ton compilateur correctement...

                                      http://mapage.noos.fr/emdel/codage.htm#cfg_compilo



                                      Tu as raison mon compilateur était mal configuré.
                                      Kurapix : J'ai changé le char pour un int.
                                      hamedsup : Pour le do... while je vais aller relire le tuto de matéo, et pour ton code je te remercie.
                                      Yno : vu que l'on n'est pas obligé de mettre un system("PAUSE"); à la fin (Code::Block) je pensais que le return 0 n'était pas obligatoire
                                      Mleg : Je pensais qu'ont pouvait, matéo le fait dans son tuto sur la SDL

                                      Mon code à beaucoup changé :
                                      #include <stdio.h>
                                      #include <stdlib.h>

                                      unsigned int NombreDeVie = 5, VieEnnemi = 5, Attaque = 0;

                                      int main(int argc, char *argv[])
                                      {
                                          printf("Vous etes attaquer par un tueur Niveau : 1 !");

                                          do
                                          {
                                              printf("Entrez un nombre de 1 a 5 pour savoir de combien vous attaquez :");
                                              scanf("%ld", &Attaque);

                                              switch (Attaque)
                                              {
                                                  case 1:
                                                      if (VieEnnemi >= 1)
                                                      {
                                                          VieEnnemi = VieEnnemi - 1;
                                                      }

                                                      else
                                                      {
                                                          VieEnnemi = 0;
                                                      }
                                                      printf("Vous faites 1 de degats a votre adversaire. Il ne lui reste plus que %ld points de vies.\n", VieEnnemi);
                                                      break;
                                                  case 2:
                                                      printf("Vous manquez votre adversaire.\n");
                                                      break;
                                                  case 3:
                                                      if (VieEnnemi >= 2) //SI la vie de l'ennemi est supérieur ou égale à 2
                                                      {
                                                          VieEnnemi = VieEnnemi - 2; //On fait -2 à sa vie
                                                      }

                                                      else //SINON
                                                      {
                                                          VieEnnemi = 0; //L'adversaire est mort
                                                      }
                                                      printf("Vous frappez de plein fouet votre adversaire. Il perd 2 de vie. Il ne lui en reste que %ld.\n", VieEnnemi);
                                                      break;
                                                  case 4:
                                                      printf("Vous manquez votre adversaire.\n");
                                                      break;
                                                  case 5:
                                                      printf("Vous manquez votre adversaire.\n");
                                                      break;
                                                  default:
                                                      printf("Le nombre entre est incorrect.\n");
                                                      break;
                                              }

                                              while (VieEnnemi > 0);

                                              printf("Vous avez tuer votre adversaire. Bravo !!\n");
                                          }
                                      }

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        5 décembre 2006 à 0:03:35

                                        Citation : Harakna

                                        Mon code à beaucoup changé :


                                        En effet !

                                        Project : Forums
                                        Compiler : GNU GCC Compiler (called directly)
                                        Directory : C:\dev\forums2\
                                        --------------------------------------------------------------------------------
                                        Switching to target: default
                                        Compiling: main.c
                                        main.c: In function `main':
                                        main.c:13: warning: long int format, unsigned int arg (arg 2)
                                        main.c:27: warning: long int format, unsigned int arg (arg 2)
                                        main.c:42: warning: long int format, unsigned int arg (arg 2)
                                        main.c:59: error: syntax error before '}' token
                                        main.c: At top level:
                                        main.c:6: warning: unused parameter 'argc'
                                        main.c:6: warning: unused parameter 'argv'
                                        Process terminated with status 1 (0 minutes, 0 seconds)
                                        1 errors, 5 warnings

                                        Tu ne comprends pas l'anglais ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Music only !
                                          5 décembre 2006 à 1:37:49

                                          Ma réponse est : pas beaucoup, mais je me débrouille

                                          EDIT : J'arrive à 15 warning

                                          Project : Console application
                                          Compiler : GNU GCC Compiler (called directly)
                                          Directory : C:\Mes Documents\Site du zero\
                                          --------------------------------------------------------------------------------
                                          Switching to target: default
                                          Compiling: main.c
                                          In file included from main.c:1:
                                          C:/PROGRAM FILES/CODEBLOCKS/include/stdio.h:219: warning: no previous prototype for 'vsnprintf'
                                          C:/PROGRAM FILES/CODEBLOCKS/include/stdio.h:258: warning: no previous prototype for 'getc'
                                          C:/PROGRAM FILES/CODEBLOCKS/include/stdio.h:265: warning: no previous prototype for 'putc'
                                          C:/PROGRAM FILES/CODEBLOCKS/include/stdio.h:272: warning: no previous prototype for 'getchar'
                                          C:/PROGRAM FILES/CODEBLOCKS/include/stdio.h:279: warning: no previous prototype for 'putchar'
                                          In file included from main.c:1:
                                          C:/PROGRAM FILES/CODEBLOCKS/include/stdio.h:401: warning: no previous prototype for 'fopen64'
                                          C:/PROGRAM FILES/CODEBLOCKS/include/stdio.h:413: warning: no previous prototype for 'ftello64'
                                          C:/PROGRAM FILES/CODEBLOCKS/include/stdio.h:468: warning: no previous prototype for 'vsnwprintf'
                                          In file included from main.c:2:
                                          C:/PROGRAM FILES/CODEBLOCKS/include/stdlib.h:314: warning: no previous prototype for 'strtof'
                                          C:/PROGRAM FILES/CODEBLOCKS/include/stdlib.h:326: warning: no previous prototype for 'wcstof'
                                          C:/PROGRAM FILES/CODEBLOCKS/include/stdlib.h:472: warning: no previous prototype for 'llabs'
                                          main.c: In function `main':
                                          main.c:13: warning: long int format, unsigned int arg (arg 2)
                                          main.c:27: warning: long int format, unsigned int arg (arg 2)
                                          main.c:42: warning: long int format, unsigned int arg (arg 2)
                                          main.c:57: warning: control reaches end of non-void function
                                          Linking console executable: C:\Mes Documents\Site du zero\console.exe
                                          Process terminated with status 0 (0 minutes, 4 seconds)
                                          0 errors, 15 warnings

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

                                          unsigned int NombreDeVie = 5, VieEnnemi = 5, Attaque = 0;

                                          int main(int argc, char *argv[])
                                          {
                                              printf("Vous etes attaquer par un tueur Niveau : 1 !");

                                              do
                                              {
                                                  printf("Entrez un nombre de 1 a 5 pour savoir de combien vous attaquez :");
                                                  scanf("%ld", &Attaque);

                                                  switch (Attaque)
                                                  {
                                                      case 1:
                                                          if (VieEnnemi >= 1)
                                                          {
                                                              VieEnnemi = VieEnnemi - 1;
                                                          }

                                                          else
                                                          {
                                                              VieEnnemi = 0;
                                                          }
                                                          printf("Vous faites 1 de degats a votre adversaire. Il ne lui reste plus que %ld points de vies.\n", VieEnnemi);
                                                          break;
                                                      case 2:
                                                          printf("Vous manquez votre adversaire.\n");
                                                          break;
                                                      case 3:
                                                          if (VieEnnemi >= 2) //SI la vie de l'ennemi est supérieur ou égale à 2
                                                          {
                                                              VieEnnemi = VieEnnemi - 2; //On fait -2 à sa vie
                                                          }

                                                          else //SINON
                                                          {
                                                              VieEnnemi = 0; //L'adversaire est mort
                                                          }
                                                          printf("Vous frappez de plein fouet votre adversaire. Il perd 2 de vie. Il ne lui en reste que %ld.\n", VieEnnemi);
                                                          break;
                                                      case 4:
                                                          printf("Vous manquez votre adversaire.\n");
                                                          break;
                                                      case 5:
                                                          printf("Vous manquez votre adversaire.\n");
                                                          break;
                                                      default:
                                                          printf("Le nombre entre est incorrect.\n");
                                                          break;
                                                  }

                                                  printf("Vous avez tuer votre adversaire. Bravo !!\n");
                                              } while (VieEnnemi > 0);
                                          }
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            5 décembre 2006 à 2:45:55

                                            Citation : Harakna


                                            EDIT : J'arrive à 15 warning


                                            In file included from main.c:1:
                                            C:/PROGRAM FILES/CODEBLOCKS/include/stdio.h:219: warning: no previous prototype for 'vsnprintf'

                                            Attention. Visiblement, tu as utilisé mon mode paranoïaque. Il nécessite quelques modifications dans les fichiers de MinGW, ce qui n'est pas une manipulation de débutant. Contente toi de l'autre mode.

                                            http://mapage.noos.fr/emdel/codage.htm#cfg_compilo

                                            C'est pourtant écrit :

                                            Citation : -ed-

                                            Il est fortement recommandé d'utiliser la configuration minimale suivante :

                                            -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes


                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Music only !
                                              5 décembre 2006 à 21:53:20

                                              Youpi !!
                                              Project : Console application
                                              Compiler : GNU GCC Compiler (called directly)
                                              Directory : C:\Mes Documents\Site du zero\
                                              -----------------------------------------------------------------------
                                              Nothing to be done.
                                              Process terminated with status 0 (0 minutes, 0 seconds)
                                              0 errors, 0 warnings

                                              Merci à tous (et en particulier à -ed-) pour votre aide.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                5 décembre 2006 à 22:32:36

                                                Citation : Kurapix

                                                1 - Le type char est réserver aux caractères.


                                                Ah bon ?

                                                Citation : Kurapix

                                                2 - Si tu as suivi le cours de M@teo21 le nom d'une variable commence par une lettre minuscule.


                                                Un nom de variable peut commencer par une lettre majuscule, une lettre minuscule ou un '_'. Je vois pas d'où tu me sors ceci...

                                                Citation : Kurapix

                                                3 - Ton do ... while est incorrect, il manque le ';' après le while (ton erreur de syntaxe doit venir de la ...) .


                                                Non, c'est qu'il n'y a pas de while() du tout à ce que j'ai vu.

                                                Apparement le problème est résolu ? (même ça c'est pas clair)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  5 décembre 2006 à 22:40:31

                                                  Citation : remram44

                                                  Citation : Kurapix

                                                  1 - Le type char est réserver aux caractères.


                                                  Ah bon ?


                                                  Comme short, il est surtout inutile tout seul. Il est converti en int à la moindre occasion (calcul, expression, index, switch, passage de paramètre.)
                                                  Il n'a de sens que dans un tableau (chaine, par exemple).

                                                  Même pour le cas scanf() avec "%c",

                                                     char c[1];
                                                     scanf ("%c", c);

                                                  est préférable.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Music only !
                                                    5 décembre 2006 à 22:51:01

                                                    Citation : -ed-

                                                    Citation : remram44

                                                    Citation : Kurapix

                                                    1 - Le type char est réserver aux caractères.


                                                    Ah bon ?


                                                    Comme short, il est surtout inutile tout seul. Il est converti en int à la moindre occasion (calcul, expression, index, switch, passage de paramètre.)
                                                    Il n'a de sens que dans un tableau (chaine, par exemple).

                                                    Même pour le cas scanf() avec "%c",


                                                       char c[1];
                                                       scanf ("%c", c);


                                                    eSt préférable.



                                                    On en apprend chaque jour^^

                                                    Il n'y a aucun interêt à utiliser un char pour retourner un "pseudo-booléen" en C ?
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      6 décembre 2006 à 0:06:01

                                                      Citation : Yno

                                                      Il n'y a aucun interêt à utiliser un char pour retourner un "pseudo-booléen" en C ?

                                                      Non. Ca ne fait qu'alourdir le code généré en ajoutant du code de conversion et de formattage totalement inutile. Le bon type, c'est int.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Music only !

                                                      Révision Chapitre 1

                                                      × 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