Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C]Problème avec %s

Amélioration du TP

    22 décembre 2005 à 12:59:38

    Bonjour le monde!

    Après plusieurs recherche, où j'ai trouvé des reponses qui disait d'utiliser "%s", ce que j'utilise depuis le début, j'aimerais pour mon pitit jeu, que dans le mode 2 joueurs le programme retiennent les nom des joueurs pour dire "machin a toi de ..." j'ai donc fait ceci :

    printf("Bonjour, quel est le nom du joueur 1?     ");
             scanf("%s", &nomj1);
             printf("Bonjour %s comment s'appele le joueur 2?     ", nomj1);
             scanf("%s", &nomj2);
             printf("Bonjour %s \n\n\n", nomj2);


    malheuresement soit la console bloque soit elle affiche ceci
    Image utilisateur
    elle affiche ceci que si l'on met une lettre (je sais que pour sa c'est %c, mais mon but c'est un prénom)
    je précise j'ai bien créée mes variables en essayant un peu tout (char*, char, int, long)

    Si vous voulez le code en entier, demander le moi.
    je vous remercie d'avance.

    DocktoR

    EDIT : Je vien de voir un topic sur la premiere page mettant un code où il y avait char nomj1[50], je n'aavit pas mis le 50 alors je l'ai rajouter mais maintenant sa affiche bien le premier nom mais ferme la console au moment d'afficher le deuxieme.


    RE-EDIT: Vu que je ne reçoit aucune reponse, je vais partir du but qu'il n'y ait pas de problème dans le parti que j'ai poster.Je vais donc mettre le code en entier, peut être que cette fois si quelqu'un remarquerat une erreur fesant planter cette parti de code

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

    int main(int argc, char *argv[])
    {
      const long MIN = 1;
      long max = 100;
      long nombreMystere;
      long nb;
      long nombre;
      long j2nb;
      long menu;
      long nivOdeD;
      long nbDeCoups = 0;
      char nomj1[50];
      char nomj2[50];
      do
      {
      printf("\t\t\t\t--- MENU ---\n\n\t\t\t\t");
      printf("1. 1 joueur\n\t\t\t\t");
      printf("2. 2 joueurs\n\t\t\t\t");
      printf("3. Regle du jeu\n\t\t\t\t");
      printf("4. Quitter\n\t\t\t\t");
      printf("Votre choix:    ");
     
      scanf("%ld", &menu);
     
    switch (menu)
    {
     
      case 1:
           
           printf("\t\t\t--- Niveau de difficulter ---\n\t\t\t");
           printf("    1. Nombres de 1 a 100\n\t\t\t");
           printf("    2. Nombres de 1 a 1000\n\t\t\t");
           printf("    3. Nombres de 1 a 10.000\n\t\t\t");
           printf("    Votre choix:    ");
           scanf("%ld", &nivOdeD);
           printf("\n");

              if (nivOdeD == 1)
    {
                srand(time(NULL));
    nombreMystere = (rand() % (max - MIN + 1)) + MIN;
               
    while ((nb != nombreMystere))
    {
          printf("Devinez le nombre mystere   ");
          scanf("%ld", &nb);
    if (nb < nombreMystere)
    {
           printf("C'est plus\n");
           nbDeCoups++;
           printf("Vous avez fait %d essay\n\n", nbDeCoups);
    }
    else if (nb > nombreMystere)
    {
         printf("C'est moin\n");
         nbDeCoups++;
         printf("Vous avez fait %d essay\n\n", nbDeCoups);
    }
    else
    {
        printf("Vous avez trouvez le nombre mystere, bravo\n\n\n");
        printf("Vous l'avez trouve en %d coups\n\n\n", nbDeCoups);
    }
    }
    }
                 else if (nivOdeD == 2)
    {
                max = 1000;
                srand(time(NULL));
    nombreMystere = (rand() % (max - MIN + 1)) + MIN;
               
    while ((nb != nombreMystere))
    {
          printf("Devinez le nombre mystere   ");
          scanf("%ld", &nb);
    if (nb < nombreMystere)
    {
           printf("C'est plus\n");
           nbDeCoups++;
           printf("Vous avez fait %d essay\n\n", nbDeCoups);
    }
    else if (nb > nombreMystere)
    {
         printf("C'est moin\n");
         nbDeCoups++;
         printf("Vous avez fait %d essay\n\n", nbDeCoups);
    }
    else
    {
        printf("Vous avez trouvez le nombre mystere, bravo\n\n\n");
        printf("Vous l'avez trouve en %d coups\n\n\n", nbDeCoups);
    }
    }
    }

                 else if (nivOdeD == 3)
    {
                max = 10000;
                srand(time(NULL));
    nombreMystere = (rand() % (max - MIN + 1)) + MIN;
               
    while ((nb != nombreMystere))
    {
          printf("Devinez le nombre mystere   ");
          scanf("%ld", &nb);
    if (nb < nombreMystere)
    {
           printf("C'est plus\n");
           nbDeCoups++;
           printf("Vous avez fait %d essay\n\n", nbDeCoups);
    }
    else if (nb > nombreMystere)
    {
         printf("C'est moin\n");
         nbDeCoups++;
         printf("Vous avez fait %d essay\n\n", nbDeCoups);
    }
    else
    {
        printf("Vous avez trouvez le nombre mystere en %d coups, bravo!\n\n\n", nbDeCoups);
    }
    }
    }
                   else
    {
         printf("Desole ce niveau n'existe pas encore");
    }
    break;

     
    case 2:
             printf("Bonjour, quel est le nom du joueur 1?     ");
             scanf("%s", &nomj1);
             printf("Bonjour %s comment s'appele le joueur 2?     ", nomj1);
             scanf("%s", &nomj2);
             printf("Bonjour %s \n\n\n", nomj2);
             
             while (!(nombre < 100) || !(nombre > 1))
            {     
            printf("%s, entre un nombre compris entre 1 et 100   ", nomj1);
            scanf("%ld", &nombre);                                                                 
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            if (nombre < 100 && nombre > 1)
            {
                       while (j2nb != nombre)
                       {
                       printf("%s, Devinez le nombre      ", nomj2);
                       scanf("%ld", &j2nb);
                       if (j2nb < nombre)
                       {
                                printf("C'est plus\n");
                       }
                       else if (j2nb > nombre)
                       {
                            printf("C'est moin\n");
                       }
                       }
                       printf("Bravo %s tu as deviner le nombre mystere\n\n\n", nomj2);
            }

            else
            {
           
                printf("Nombre invalide\n");
           
            }
            }
           
           
    break;

    case 4:
         return 0;
         break;
           
         
    case 3:
         printf("\t\t\t\t\n\n\nBienvenu dans le jeu du nombre mystere!\n\n\n");
         printf("\t\t\t\tBUT:");
         printf("\n\n\nLe but de ce jeu est simple, trouver le nombre mystere soit genere par moi, l'ordinateur, soit par vous.");
         printf("\n\n\t\t\t\tCOMMENT JOUER:");
         printf("\n\n\nSuiver les intructions a l'ecran et vous verrez c'est simple.\n\n\n\n");
    break;

    default:
    break;
    }
    }while ((nb == nombreMystere) || (j2nb == nombre) || (menu == 3) || (nbDeCoups == 1) || (menu == 0 || menu > 4));
    }
    • Partager sur Facebook
    • Partager sur Twitter
      22 décembre 2005 à 15:54:24

      j'ai exactement le même probleme que toi...
      je n'arrive pas initialiser la variable
      char joueur1, joueur2;


      car j'ai crée le programme du tp 1 avec les differents niveau, es je voudrai rajouter le mod multijoueur personnalisé, qui demande les noms des joueur afin qu'il ya pas de confusion mais je n'y arrive pas..
      si vous avait une solution de code, ou une explication du pourquoi sa marche pas sa m'aiderai beaucoup.
      char joueur1[50], joueur2[50];
          printf("entrer le nom du joueur 1 : ");
          scanf("%s", &joueur1);
          printf("entrer le nom du joueur 2 : ");
          scanf("%s", &joueur2);


      merci de votre aide futur...
      • Partager sur Facebook
      • Partager sur Twitter
        22 décembre 2005 à 15:59:15

        scanf("%s",joueur1) et pas &joueur1 car joueur1 est déjà une adresse (celle de joueur1[0] au passage).
        • Partager sur Facebook
        • Partager sur Twitter
          22 décembre 2005 à 16:00:06

          tu as donné la réponse +/- sur ton premier post
          • Partager sur Facebook
          • Partager sur Twitter
          Engineer in Training please wait fr social life ---- Vist www.charybde.be
            22 décembre 2005 à 16:29:34

            Merci de vos reponse j'ai resolu mon problème qui ce situé sur le do...while qui encerclé le code. J'avais mis au depart un nombre limiter de coup et j'avais dis de refere que si la variable etait sur 1 et apres je me suis dit je devrait plutôt faire avec "vous avez fait tant de coups" j'avais donc mis ma variable sur 1 mais je n'avais pas enlever dans le while du bas.
            une petite question : si on fait scanf("%ld", &variable); mais si on a deja fait long variable sa na rien de different par rapport a scanf("%ld", varible); ??
            • Partager sur Facebook
            • Partager sur Twitter
              22 décembre 2005 à 16:56:11

              C'es complement different ^^
              Dans scanf("%ld", &variable);, tu donne l'adresse de la variable 'variable' a un pointeur pour que cette variable puisse etre modifier autre pars que dans le bloc ou elle a ete déclaré.
              Dans scanf("%ld", variable);, tu donne le contenu de 'variable' a un pointeur, qui va le prendre comme une adresse et donc modifier une adresse inexistante, ce qui va renvoyer une erreur (voir meme provoquer de grave bug).
              • Partager sur Facebook
              • Partager sur Twitter
                22 décembre 2005 à 16:58:55

                ok merci de ta reponse. sa m'eclaircie :)
                • Partager sur Facebook
                • Partager sur Twitter

                [C]Problème avec %s

                × 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