Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Problème] Chaînes

Un problème :) ...

    1 février 2006 à 16:10:49

    Voilà j'ai un problème sur les chaînes, je suis en train de coder un pendu pour m'entraîner mais ya quelques éléments qui me manque.

    void afficheTiretsBas(const char* MotCache, char* LettreUtilisateur, const char* CaractereUtilisateur, char* MotUtilisateur)
    {
         long tirets, boucle;
         tirets = strlen(MotCache);
         char* espace = "_ ";
         for(boucle=0; boucle<tirets; boucle++) {
          if(strchr(MotCache[boucle], CaractereUtilisateur) != NULL) {
          strcpy(MotUtilisateur[boucle], CaractereUtilisateur);
          }
          else {
          strcpy(MotUtilisateur[boucle], espace);
          }
         }
         printf("Mot a decouvrir : %s", MotUtilisateur);
    }

    Là je vien de mettre une partie de mon code, elle est senser mettre "_ " à la place de MotCache[boucle] si l'utilisateur n'a pas choisi une bonne lettre, et elle doit mettre CaractereUtilisateur a la place de MotCache[boucle] si l'utilisateur a choisi une bonne lettre.

    Mais à la compilation je rencontre les erreurs:
    [Warning] passing arg 1 of strchr makes integer from pointer without a cast
    [Warning] passing arg 2 of strchr makes integer from pointer without a cast
    [Warning] passing arg 1 of strcpy makes integer from pointer without a cast
    [Warning] passing arg 1 of strcpy makes integer from pointer without a cast

    Le code en entier:
    #include <stdio.h>
    #include <string.h>

    void biliothequeDuMot(char* MotCache);
    void afficheTiretsBas(const char* MotCache, char* LettreUtilisateur, const char* CaractereUtilisateur, char* MotUtilisateur);

    int main(int argc, char *argv[])
    {
        printf("\n\n\t\tLe pendu ... grace aux chaines de caracteres.\n");
        char MotCache[100] = {0};
        char LettreUtilisateur[10] = {0};
        char CaractereUtilisateur[2] = {0};
        char MotUtilisateur[10] = {0};
        biliothequeDuMot(MotCache); // On détermine par hazard le mot
        long vieJoueur = 11, boucle;
       
        /* Corps du programme: le joueur a vieJoueur de vies ! */
        for(boucle=0; boucle<vieJoueur; boucle++){
        vieJoueur--;
        printf("\nIl vous reste %ld vies.\nVous avez deja citer les caracteres : %s\n",vieJoueur ,LettreUtilisateur);
        printf("Tapez UN caractere : ");
        scanf("%s",CaractereUtilisateur);
        strcat(LettreUtilisateur,CaractereUtilisateur);
        afficheTiretsBas(MotCache, LettreUtilisateur, CaractereUtilisateur, MotUtilisateur);
        getchar();
        printf("\n");
        }
       
        printf("Perdu ! Vous n'avez plus de vie ! La reponse etait : %s \nAppuyez sur une touche pour quitter le programme !q",MotCache);
        getchar();
        return 0;
    }

    void afficheTiretsBas(const char* MotCache, char* LettreUtilisateur, const char* CaractereUtilisateur, char* MotUtilisateur)
    {
         long tirets, boucle;
         tirets = strlen(MotCache);
         char* espace = "_ ";
         for(boucle=0; boucle<tirets; boucle++) {
          if(strchr(MotCache[boucle], CaractereUtilisateur) != NULL) {
          strcpy(MotUtilisateur[boucle], CaractereUtilisateur);
          }
          else {
          strcpy(MotUtilisateur[boucle], espace);
          }
         }
         printf("Mot a decouvrir : %s", MotUtilisateur);

    }
    void biliothequeDuMot(char* MotCache)
    {
         long nombreHazard;
         // Les mots qui peuvent être choisir par MotCache[100] entre 1 et 5
         char mot1[] = "lapin", mot2[] = "gradin", mot3[] = "avion", mot4[] = "sapin", mot5[] = "grapin";
         srand(time(NULL));
         nombreHazard = (rand() % (5 - 1 + 1)) + 1;
         // Si nombreHazard == x; alors choisir MotCache == motx;
         if(nombreHazard == 1) { strcpy(MotCache, mot1); };
         if(nombreHazard == 2) { strcpy(MotCache, mot2); };
         if(nombreHazard == 3) { strcpy(MotCache, mot3); };
         if(nombreHazard == 4) { strcpy(MotCache, mot4); };
         if(nombreHazard == 5) { strcpy(MotCache, mot5); };
    }
    • Partager sur Facebook
    • Partager sur Twitter
      1 février 2006 à 16:27:59

      RTFM.

      Citation : man

      char *strchr(const char *s, int c);



      Or toi tu met un char en premier et un char * en second :/

      Utiliser strchr ne sert à rien la, fait plutot un == entre deux char.

      Citation : man

      char *strcpy(char *dest, const char *src);



      Et toi, premièrement tu met un const en 1er argument, mais en plus c'est un char et non un char *. Idem le second.

      Bilan: n'utilise pas des char * pour faire joli, car dans ton cas ça ne sert à rien et c'est très mal utilisé
      • Partager sur Facebook
      • Partager sur Twitter
        1 février 2006 à 16:48:49

        Il y a beaucoup de confusions dans mon programme je vais recommencer en prenant compte de tes avertissements, merci :D .
        • Partager sur Facebook
        • Partager sur Twitter

        [Problème] Chaînes

        × 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