Partage
  • Partager sur Facebook
  • Partager sur Twitter

plus ou moins

acceuil

    15 août 2017 à 4:22:58

    slt à tous

    je suis au milieu du cour sur le C. et j'ai voulu essayer la programation modulaire 

    et j'ai fais essayer d'elargir le TP "Plus ou Moins" en fesant ceci:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include "fonction.h"
    int main()
    {
    const int MIN=0;
    const int MAX=100;
    int Mode=0;
    int Nombre_aleatoire;
    srand(time(NULL));
    Nombre_aleatoire=(rand()%(MAX-MIN+1))+MIN;
    int Nombre_du_joueur1=0, Nombre_du_joueur2=0, Nombre_de_coups=0;
    printf("=======Plus ou Moins=======\n\t");
    printf("selectionner le mode\nPour cela il vous suffit de choisir le chiffre correspondant au mode:\n\t");
    printf("1.Mode 1 joueur\n\n\t");
    printf("2.Mode 2 joueurs\n\n\t");
    scanf("%d", &Mode);
    switch (Mode)//liaison entre chiffre et mode
    {
    case 1:
    nom();
    printf("Nous allons jouer a devine le nombre(ou le chiffre) que j'ai choisi.\n\t\t\tC'est hyper simple; tu devine juste le nomre ue j'ai choisi aleatooirement et le tour est jouer\n\n\n\nPour commencer choisit ton nombre(compris entre 0 et 100),j'ai deja choisi le mien\n\n");
    do
    {
    scanf("%d", &Nombre_du_joueur1);
    if (Nombre_du_joueur1<0 || Nombre_du_joueur1>100)
    printf("t'es idiot ou quoi. j'ai entre 0 et 100\n");
    else if (Nombre_du_joueur1>Nombre_aleatoire)
    printf("le tient est superieur au mien, recommence\n");
    else if (Nombre_du_joueur1<Nombre_aleatoire)
    printf("le tient est inferieur au mien, recommence\n");
    else
    printf("§§§§§Bravo§§§§§. t'as trouver, t'es un genie\nt'as eu la reponse en %d coups", Nombre_de_coups);
    Nombre_de_coups++;
    }while(Nombre_du_joueur1!=Nombre_aleatoire);
    break;
    case 2//mode deux joueurs
    printf("que le joueur 1 tape so numero en cachette\n");
    scanf("%d", &Nombre_du_joueur1);
    do
    {
    printf("au joueur 2 de jouer\n\n\t");
    scanf("%d", &Nombre_du_joueur2);
    if (Nombre_du_joueur2>Nombre_du_joueur1)
    printf("le tient est superieur au sien, recommence\n");
    else if (Nombre_du_joueur2<Nombre_du_joueur1)
    printf("le tient est inferieur au sien, recommence\n");
    else
    printf("§§§§§Bravo§§§§§. t'as trouver, t'es un genie\nt'as eu la reponse en %d coups", Nombre_de_coups);
    Nombre_de_coups++;
    }while(Nombre_du_joueur1!=Nombre_du_joueur2);
    break;
    }
    return 0;
    }

    et ma fonction est:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    void nom()
    {
    char nom=0, prenom=0;
    printf("entrer votre nom\n");
    scanf("%s", &nom);
    printf("entrer votre prenom\n");
    scanf("%s", &prenom);
    printf("\nbienvenue Mr %s %s\n\t", &nom, &prenom);
    }

    le proleme se pose au miveau de ma fonction: elle recupere le nom et le prenom, mais au lieu de les affichés tous les deux elle affiche les prenoms deux fois.

    exemple:

    - prenom=brice et nom= cachmir

    ma fonction va affiché ceci bienvenue Mr rice brice (j'ai pas oublié le b du premier brice:p. c'est eactement ce que ma fonction afiche)

    merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      15 août 2017 à 6:39:23

      Bonjour ! Je crois que l'erreur vient de ce que tu as déclaré 'prenom' et 'nom' comme des caractères, et non comme des chaînes de caractères. Et tout le reste est logique :

      char nom=0, prenom=0;
      

      'prenom' et 'nom' prennent chacun 1 octet (type char), et cet octet est rempli par un 0. On a donc deux octets : 0, 0.

      scanf("%s", &nom);
      

      Lorsque tu entres « cachmir », le 'c' va dans le deuxième octet (celui réservé pour 'nom'), le 'a' dans l'octet qui suit (bien qu'il ne soit pas sensé être utilisé) et ainsi de suite. Les octets sont maintenant : 0, c, a, c, h, m, i, r, 0 (et seuls les deux premiers sont sensés être utilisés).

      scanf("%s", &prenom);
      

      Lorsque tu entres « brice », le premier octet reçoit 'b', le deuxième reçoit 'r', et les autres reçoivent 'i', 'c', 'e', et 0. Les octets sont maintenant : b, r, i, c, e, 0, i, r, 0.

      Passons à l'affichage :

      printf("\nbienvenue Mr %s %s\n\t", &nom, &prenom);
      

      Il affiche 'nom', qui est un caractère, avec le format %s, donc il va tout afficher jusqu'à rencontrer le caractère nul. Tout afficher à partir du deuxième octet, puisque 'nom' est stocké au deuxième octet. Donc, pour 'nom', il affichera « rice ».

      Pour 'prenom', c'est pareil, mais à partir du premier octet, puisque 'prenom' est stocké au premier octet. Donc, pour 'prenom', il affichera « brice ».

      (Apparemment il a stocké d'abord 'nom' puis 'prenom' dans cet ordre.)




      -
      Edité par robun 15 août 2017 à 6:41:01

      • Partager sur Facebook
      • Partager sur Twitter
        15 août 2017 à 16:29:00

        .

        -
        Edité par SavonDoux 15 août 2017 à 17:33:03

        • Partager sur Facebook
        • Partager sur Twitter
          23 août 2017 à 6:04:54

          Bonjour à tous 

          Je suis coincé pour le jeu du plus ou moins.

          Je ne parviens pas à continuer le jeu lorsque je demande.

          #include <stdio.h>
          #include <stdlib.h>
          #include <time.h>
          
          
          int main(int argc, const char * argv[])
          
            {
              int nombreDejoueur;
                  printf ("1. 1 joueur\n\n2. 2 joueurs\n\n");
                  scanf ("%d", &nombreDejoueur);
              
              if (nombreDejoueur == 1)
             {
              const int MAX = 100, MIN = 1;
              int nombreEntre = 0,
                  nombreMystere = 0,
                  compteurCoups = 0,
                  continuerPartie = 1;
                  srand(time(NULL));
                  nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                  printf ("Vous devez deviner le nombre\n\n");
              do
             {
                  printf("Entrez un nombre ! \n");
                  scanf("%d", &nombreEntre);
                  
                  // On compare le nombre entré avec le nombre mystère
                  
              if (nombreMystere > nombreEntre)
                  printf("C'est plus !\n\n");
              else if (nombreMystere < nombreEntre)
                  printf("C'est moins !\n\n");
              else
                  printf("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n\n", compteurCoups);
                  compteurCoups++;
             }while (nombreEntre != nombreMystere);
            
                  printf ("Taper 1 pour continuer a jouer ou 0 pour quitter le jeu :\n\n");
                  scanf ("%d", &continuerPartie);
             }
              else
             {
                  int nombreEntre = 0,
                  nombreMystere = 0,
                  compteurCoups = 0,
                  continuerPartie = 1;
                  printf(" joueur 1 doit entrer un nombre pour que le joueur 2 devine !\n\n");
                  scanf("%d", &nombreMystere);
                 
                  printf (" Devinez le nombre mystere ! \n\n");
              do
              {
              if (continuerPartie == 1)
                  printf("entrez un nombre ! \n");
                  scanf("%d", &nombreEntre);
              if (nombreMystere > nombreEntre)
                  printf("C'est plus !\n\n");
                      
              else if (nombreMystere < nombreEntre)
                  printf("C'est moins !\n\n");
              else
                  printf("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n\n", compteurCoups);
                      compteurCoups++;
              }while (nombreEntre != nombreMystere);
                  printf ("Taper 1 pour continuer a jouer ou 0 pour quitter le jeu :\n\n");
                  scanf ("%d", &continuerPartie);
              }
                  return 0;
              }
           

          merci de votre aide

          • Partager sur Facebook
          • Partager sur Twitter
            23 août 2017 à 8:48:07

            Bonjour,

            Il aurait été bien de créer ton propre sujet et ne pas "polluer" celui de quelqu'un d'autre. Concernant ton code, il y a pas mal de problèmes d'indentation ce qui rend le code relativement illisible.

            Concernant le fond, en effet dans ton code tu demande au joueur si il veux rejouer et tu met bien à jour la variable pour continuer la partie, mais tu ne reboucle pas au début de la partie, il faudrait mettre tout ton jeu dans une grande boucle while qui vérifie la valeur de la variable continuer partie ;)

            • Partager sur Facebook
            • Partager sur Twitter
              23 août 2017 à 8:48:55

              Salut,

              Déjà si tu pouvais indenter ton code ce serait plus facile à lire, parce que là c'est chaud à s'y retrouver :) .

              Sinon, c'est normal que la partie ne continue pas. Regarde ta ligne 67 par exemple. Tu ne te sers pas de ta variable continuerPartie. Ce qu'il faudrait faire c'est mettre tout ton code dans une boucle while comme ceci:

              int main(int argc, const char * argv[])
              {
                   int continuerPartie = 1;
                   while(continuerPartie)
                   {
                       //Ton code
                   }
                   return 0;
              }

              Je n'ai pas testé mais je pense que ça devrait marcher. A+

              edit: dsl LChalam, on a répondu en même temps

              -
              Edité par Sylabio 23 août 2017 à 8:49:58

              • Partager sur Facebook
              • Partager sur Twitter

              Plus j'apprends et plus je me rends compte que je ne sais rien.

                23 août 2017 à 12:20:48

                Hello,

                @LChalam @quent34: une boucle do....while() serait plus adaptée dans la cas présent. Pourquoi initialiser une variable pour pouvoir commencer le jeu ?

                int cont;
                
                do {
                
                    // jeu
                
                    do { 
                        puts("Recommencer ? (1=oui, 0=non)");
                        cont=getchar()-'0';
                    } while(cont<0 || cont>1);
                } while(cont==1);

                .

                -
                Edité par edgarjacobs 23 août 2017 à 12:37:45

                • 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

                  23 août 2017 à 16:12:36

                  LChalam 

                  Bonjour,

                  Clairement, tu as raison et je te demande de m'excuser. Je n'avais pas l'intention de polluer désolé, prochaine fois je ferai comme tu as dit !!

                  Merci également pour les conseils; je vais essayer de résoudre le problème de mon code.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 août 2017 à 16:27:37

                    Pas de soucis, c'est juste pour une prochaine si besoin ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 août 2017 à 9:54:48

                      Tout à fait @edgarjacobs

                      -
                      Edité par Sylabio 24 août 2017 à 9:55:32

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Plus j'apprends et plus je me rends compte que je ne sais rien.

                      plus ou moins

                      × 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