Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu plus ou moins (Code::block)

Amelioration de mon programme

    4 août 2020 à 15:18:31

    @storyboard:
       //que faire ensuite ,?????
    Recommencer ...
    Ce n'est vraiment pas la bonne façon de faire une telle fonction.
    void Nbr_Joueur(char *c, int V)
    devrait être remplacé par:
    void Nbr_Joueur(char c[])
    la variable V ne sert à rien.
    L'utilisation de getchar() va te jouer un tour. Il faut lire tous les caractères jusqu'à la fin de ligne ('\n')
    Pourquoi le %30s dans le scanf?
    Que vas-tu faire de la valeur de retour dans le tableau c après l'appel?
    ...
    • Partager sur Facebook
    • Partager sur Twitter

    Le Tout est souvent plus grand que la somme de ses parties.

      4 août 2020 à 15:29:44

      Ce que je souhaiterai realiser c'est une simlification de mon prgramme ainsi qu'une amelioration en terme de qualité.
      En effet lorsque j'utilisais les scanf () je n'avais pas remarqué les problemes des espaces ni de sa vulnerabilité vu dans le cours d'OC . Mon but serai donc d'ameliorer mon prgramme le plus possible pour le rednre "parfait" tout en restant facile a lire.  
      Pour l'instant je n'ai realisé que la parti nombre de joueurs :). 

      #include<stdlib.h>
      #include<stdio.h>
      #include<time.h>
      #include<conio.h>
      #include <stdbool.h>
      #include <string.h>
      
      
      char Nbr_Joueur(void);
      void del_space(char *c);
      void viderBuffer();
      
      
      
      int main(void)
      {
      char Choix;
      Choix=Nbr_Joueur();
      printf(" \n %c \n ",Choix);
      
      
      
      }
      
      
      
      char Nbr_Joueur(void)
      {
         char Choose[30];
         char Choix_joueur;
         bool Verif=0;
      
             do{
             printf(" \n Si vous  voulez jouer seul taper 1 sinon taper 2 \n ");
             fgets(Choose,30,stdin);
             del_space(Choose);
                 if(strlen(Choose)<=2)
                 {
                     if(Choose[0]=='1' || Choose[0]=='2')
                     {
                      Choix_joueur=Choose[0];
                      Verif=1;
      
                     }
                 }
      
                 else
                 {
                  viderBuffer();
                  printf("\n  vous  vous etes trompe \n ");
                 }
      
             }while(Verif==0);
      return Choix_joueur;
      }
      
      
      void del_space(char *c)
      {
      int i,j,n;
      
      n=strlen(c);
      
      for(i=0;i<n;i++)
      {
          if (c[i]==' ')
                         {
                          for(j=i;j<(n-1);j++)
                           c[j]=c[j+1];
                         }
      }
      
      }
      
      void viderBuffer()
      {
          int c = 0;
          while (c != '\n' && c != EOF)
          {
              c = getchar();
          }
      }
      


       



      robun a écrit:

      storyboard : dans la fonction 'NbrJoueur', à quoi correspondent 'c' et 'V' ? Ça peut être utile de le mettre en commentaire.

      Il me semble que le but de cette fonction est de retourner le nombre de joueurs. Donc elle doit être de type 'int' (ou 'unsigned int', ou autre variante, peu importe) et non 'void', et doit se terminer par « return <un nombre> ».

      while( (c[0] !='1' || c[0] !='2')

      Tu es sûr du || ? Si je tape '1', c[0] sera égal à '1', mais sera différent de '2', donc la condition sera vérifiée. Est-ce vraiment le but ? (Pour qu'elle ne soit pas vérifiée il faudrait que sa négation soit vraie, et sa négation est : c[0] == 1 et c[0] == 2. Bizarre...)

       && (c==0));

      Ça aussi c'est bizarre. Là, je n'ai pas la moindre idée de ce que tu veux faire. ('c' a été défini comme pointeur, donc tu veux que l'adresse du pointeur soit l'adresse 0 ?)


      -
      Edité par robun il y a 31 minutes



      -
      Edité par storyboard 4 août 2020 à 16:13:48

      • Partager sur Facebook
      • Partager sur Twitter
        4 août 2020 à 16:48:22

        Ta fonction del_space() est complètement foireuse:

        • elle ne déplace pas le \0 final
        • elle ne fait pas son travail si il y a plusieurs espaces consécutifs

        Dans viderBuffer(), qui a dit que EOF ne pouvait pas valoir 0 ?

        • Partager sur Facebook
        • Partager sur Twitter

        On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

          5 août 2020 à 8:46:56

          En effet je viens de commetre de nombreuses erreurs je viens de me rectifier , par contre j'ai trouvé cette fonction pour contnue dans mon optimisation du programme  et je ne la comprend pas. 
          Mon reel problème est que le scanf prend en compte les espaces et donc se reboot c'est pourquoi je souhaiterai l’améliorer. J'ai supprimer la focntion del_space , et je les remplacer par cette fonction trouvé sur internet. Et j'avoue la comprendre son principe mais pas son fonctionnement 


          void viderBuffer()
          {
              int c = 0;
              while (c != '\n' && c != EOF)
              {
                  c = getchar();
              }
          }
          
          • Partager sur Facebook
          • Partager sur Twitter

          Jeu plus ou moins (Code::block)

          × 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