IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

le Pendu : travailler avec les CHAR


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 40
    Points : 25
    Points
    25
    Par défaut le Pendu : travailler avec les CHAR
    Bonjour,

    voici mon objectif :

    Le jeu du pendu consiste à trouver en maximum 5 coups un mot de 5 lettres parmi un ensemble de mots connus de l'ordinateur. Au fur et à mesure des erreurs, le mot PENDU s'affiche !


    Pour commencer je voudrais tout simplement saisir un mot et l'afficher voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* déclaration des variables*/
     
    char *mot = "tigre";
    char * motsai;
     
     
    printf ("Saisir un mot!\n");
                    scanf ("%s",&motsai);
                    printf(motsai);
    Lorsque j'exécute ce programme en ligne de commande une fenetre windows "une erreur s'est produite ... envoyer ne pas envoyer "

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    scanf() n'est pas une fonction pour les débutants. Utilise fgets() à la place.

    Et ne lui passes pas un pointeur non-initialisé, ça n'aime pas...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    En faite je voudrais pas utiliser les pointeur ni les tableau je voudrai utiliser une variable de type "string"

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Mais ça n'existe pas en C.
    En C, une chaîne de caractères est un tableau de caractères, terminé par un caractère nul.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    tu peux crée ta structure string avec sa fonction wstring() et rstring()

  6. #6
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Points : 354
    Points
    354
    Par défaut
    je pense que remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char * motsai;
     
     
    printf ("Saisir un mot!\n");
                    scanf ("%s",&motsai);
                    printf(motsai);
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char  motsai[6];
     
     
    printf ("Saisir un mot!\n");
                    scanf ("%6s",motsai);
                    printf("%s",motsai);
    donnerait de meilleurs résultats. M'enfin, ce que j'en dis^^...

  7. #7
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 944
    Points
    1 944
    Par défaut
    dans les apparences tu es sous windows alors tu va commencer comme tu dis toi meme etre debutant par faire un program dos. c'est un conseil. et voila pour un debut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #include <stdio.h>
    #include <conio.h>  //seulement si tu es sous windows pour linux ya autre chose a faire
    #include <string.h>  //on l'utilisera plus tard
     
    int main ()
    {
       char mots[25] = "voiture"; //pour faire simple et comme tu veux pas de pointeur le mots le plus long va messurer 25 caracteres
       char lettre;
       int i=0;
     
       while (i++<5)
       {
          lettre = getch();
          printf("%c",lettre);
       } 
       printf("\n le mot etait %s",mots);
    }
    dans ce code on ne compare pas encore mais on affiche a l'ecran toutes les touches tape au clavier apres 5 frappe c'est fini. on comparera plus tard si tu n'as aucune question
    Petit lien vers mon premier jeux SDL2/C
    http://store.steampowered.com/app/72..._Soul_Of_Mask/
    la suite? ca vient,ca vient!

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par lilington Voir le message
    dans les apparences tu es sous windows alors tu va commencer comme tu dis toi meme etre debutant par faire un program dos.
    Hum, il ne fait pas confondre programme dos et programme en ligne de commande.
    Les programmes dos sont 16 bits et il devient de plus en plus difficile de les lancer sur un windows nativement.
    Citation Envoyé par lilington Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <conio.h>  //seulement si tu es sous windows pour linux ya autre chose a faire
    Qu'y a-t-il à faire ?
    Pourquoi lancer un débutant vers conio qui n'est pas portable alors que le c standard intègre déjà tant de choses ?
    Citation Envoyé par lilington Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <string.h>  //on l'utilisera plus tard
    Pourquoi inclure un fichier d'entête pour ne pas s'en servir ?

    Pour finir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >gcc -c -Wall -Wextra 08-11-07.c
    08-11-07.c:17: warning: control reaches end of non-void function
    Il manque un "return xx;" à la fin de main.

  9. #9
    Invité(e)
    Invité(e)
    Par défaut
    Voilà un petit bout de code qui demande à un joueur de taper des lettres les unes après les autres et qui quitte au bout de 5 essais.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
     
    /* fonction de purge d'un flux d'entrée .*/
    void purge(FILE *f)
    {
        int c;
        if(NULL != f) {
            while ((c = fgetc(f)) != '\n' && c != EOF);
        }
    }
     
    int main(void) 
    {
        /* dernière lettre entrée par le joueur */
        int lettre;
        /* nombre de coups à jouer restant */
        int coups = 5;
        /* tant qu'il reste des coups à jouer */
        while(coups > 0) {
            printf("Entrez une lettre...\n");
            /* on récupère une lettre de l'entrée standard */
            lettre = fgetc(stdin);
            /* on vide l'entrée standard */
            purge(stdin);
            /* affiche la lettre */
            printf("->%c\n", lettre);
     
            #if 1
            coups --;
            #else
            /* ici, on regarde si la lettre jouée est bonne, mais c'est une autre 
                histoire voir man strchr, man tolower...*/
            if(lettre pas dans le mot) {
                /* le joueur n'a pas trouvé, il perd un coup */
                coups --;
            } 
            if(mot trouvé) {
                /* sortie de la boucle while*/
                break;
            }
            #endif
        }
        if(coups > 0) {
            printf("Bravo\n");
        } else {
            printf("Perdu\n");
        }
        return 0;
    }

  10. #10
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,
    Citation Envoyé par mabu Voir le message
    Voilà un petit bout de code qui demande à un joueur de taper des lettres les unes après les autres et qui quitte au bout de 5 essais.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
     
    /* fonction de purge d'un flux d'entrée .*/
    void purge(FILE *f)
    {
        int c;
        if(NULL != f) {
            while ((c = fgetc(f)) != '\n' && c != EOF);
        }
    }
     
    int main(void) 
    {
        /* dernière lettre entrée par le joueur */
        int lettre;
        /* nombre de coups à jouer restant */
        int coups = 5;
        /* tant qu'il reste des coups à jouer */
        while(coups > 0) {
            printf("Entrez une lettre...\n");
            /* on récupère une lettre de l'entrée standard */
            lettre = fgetc(stdin);
            /* on vide l'entrée standard */
            purge(stdin);
            /* affiche la lettre */
            printf("->%c\n", lettre);
     
            #if 1
            coups --;
            #else
            /* ici, on regarde si la lettre jouée est bonne, mais c'est une autre 
                histoire voir man strchr, man tolower...*/
            if(lettre pas dans le mot) {
                /* le joueur n'a pas trouvé, il perd un coup */
                coups --;
            } 
            if(mot trouvé) {
                /* sortie de la boucle while*/
                break;
            }
            #endif
        }
        if(coups > 0) {
            printf("Bravo\n");
        } else {
            printf("Perdu\n");
        }
        return 0;
    }
    Une question quand même (deux, en fait)...

    Pourquoi passer par une directive préprocesseur

    Et surtout, pourquoi ne pas plutôt baser la logique sur une boucle "tant que"

    Cela permettrait de faire "sortir" une partie de ce qui est conditionné au nombre de coup de la boucle, et donc d'éviter le break au sujet duquel je ne m'habituerai jamais à son utilisation pour autre chose que les tests à choix multiples

    Mon C est un peu rouillé, mais cela pourrait ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    /* la fonction "purge classique, que je me contente de copier ;) 
     */
    void purge(FILE *f)
    {
        int c;
        if(NULL != f) {
            while ((c = fgetc(f)) != '\n' && c != EOF);
        }
    }
     
    int main()
    {
        int lettre;
        int trouve = 0
        int coups = 5;
        do
        {
            printf("Entrez une lettre...\n");
            /* on récupère une lettre de l'entrée standard */
            lettre = fgetc(stdin);
            /* on vide l'entrée standard */
            purge(stdin);
            /* affiche la lettre */
            printf("->%c\n", lettre);
            /* la letre n'existe pas, le joueur perd un coup */
            if( non_trouve )
            {
                 coup--;
            }
            /* ou toutes les lettres ont été trouvées */
            else if(tout_trouve)
            {
                trouve = 1;
            }
        }while(coups==0 || trouve == 1);
        /* Arrivé ici nous savons que le joueur n'a que deux solutions:
         * il a gagné (trouvé le mot) ou il a perdu (il est pendu)
         */
        if(trouve==1)
        {
            printf("Gagne\n");
        }
        else
        {
            printf("Perdu\n");
        }
        return 0;
    }
    Pour le reste, "YAPUKA" expliquer ensuite ce que peut représenter "non_trouve" et "tout_trouve"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par koala01 Voir le message
    Pourquoi passer par une directive préprocesseur
    Bah juste parce que je n'ai pas eu e temps d'écrire proprement le reste du code voulu ... et que je ne voulais pas poster qqchose qui ne compile pas

    Citation Envoyé par koala01 Voir le message
    Et surtout, pourquoi ne pas plutôt baser la logique sur une boucle "tant que"
    while veut pas dire tant que ?
    Dernière modification par Invité(e) ; 08/11/2008 à 09h15.

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par moi95 Voir le message
    En faite je voudrais pas utiliser les pointeur ni les tableau je voudrai utiliser une variable de type "string"
    Comme Médinoc l'a dit, le type string n'existe pas en C mais tu peux le faire toi-même ou en utiliser des tous faits comme le miens: http://franckh.developpez.com/cstr/


    PS: Vous êtes sûr qu'il a demandé à ce qu'on lui fasse le programme à sa place ? Là vous l'aidez pas, il va bêtement recopier et n'aura rien appris
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  13. #13
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Citation Envoyé par mabu Voir le message
    Bonjour,

    while veut pas dire tant que ?
    juste... je voulais écrire "une boucle jusque"...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/06/2006, 11h03
  2. travailler avec les images et les vecteurs
    Par susimido dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 24/04/2006, 15h02
  3. Travail avec les int8
    Par VirtualDolby dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/04/2006, 09h33
  4. Réponses: 8
    Dernier message: 22/11/2005, 07h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo