Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Officiels > Programmation > Apprenez à programmer en C ! > [Théorie] Techniques avancées > TP : Réalisation d'un pendu > Lecture des commentaires

TP : Réalisation d'un pendu

Vous devez être inscrit pour pouvoir poster des messages

Page : 1  2  3  Suivante
Pseudo Commentaire
Page : 1  2  3  Suivante
Hors ligne iPoulet # Posté le 02/03/2006 à 13:24:19 - Ce membre a mis la note : 19
Avatar
Groupe : Membres
Ben et elle est où la première lettre du mot à trouver ?

19 pour la peine.

Étoilé
« Eĉ guto malgranda, konstante frapante, traboras la monton granitan »
 
Hors ligne M@teo21 # Posté le 02/03/2006 à 14:37:55 - Ce membre n'a pas mis de note
Doh ! Nuts. Mmh, donuts !
Avatar
Admins
Ah oui j'avais oublié cette règle du pendu.
Bah, de toute façon c'est ultra simple à faire : il suffit de mettre lettreTrouvee[0] à 1 dès le début et basta :)

Ayez l'initiative de prendre des initiatives, mon programme n'est qu'une possibilité, ce n'est pas la référence absolue. Vous pouvez faire mieux, d'ailleurs je vous invite à le faire.

Ce qui se conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément.

Nicolas Boileau (je suis fan)
Suivez l'aventure du SdZ et de Simple IT sur notre blog !
 
Hors ligne Kr00pS # Posté le 02/03/2006 à 17:01:16 - Ce membre a mis la note : 20
Trashed and Lost
Avatar
Groupe : Membres
Pas mal ce TP :-°

La première version sans dictionnaire externe est assez simple par contre la deuxième j'y était presque mais j'ai pas reussi :p

Un petit 20 car j'adore avoir du fil à retordre ^^
Hors ligne Janeo # Posté le 02/03/2006 à 18:40:49 - Ce membre a mis la note : 19
Groupe : Membres
j'aurais jamais cru que réalisé un pendu serait si difficile ^^

néanmoins le tuto est génial 19
Hors ligne louisclem # Posté le 03/03/2006 à 18:39:05 - Ce membre a mis la note : 18
J'aime le
Avatar
Groupe : Membres
Cette fois ci, je dis bravo ;)

Je trouve le sujet du TP très intéressant, et qui fait très bien réutiliser les connaissances. Il n'est pas trop dur (enfin, pour moi :p ) et je pense qu'un zérO qui a bien suivi les cours ne devrait pas avoir de gros gros problèmes là. Donc, c'est un très bon TP au sujet intéressant. La correction est bien faite aussi. Enfin, voilà, bravo ;)

Faut juste que je cherche un dictionnaire au format texte, je sais pas où on peut en trouver, ça serait utile :D

:soleil: :soleil: :soleil:
 
Hors ligne mleg # Posté le 03/03/2006 à 23:11:29 - Ce membre n'a pas mis de note
None
Groupe : Membres
Pourquoi ne pas proposer à l'utilisateur de configurer son dico ?
 
Hors ligne Meothed # Posté le 03/03/2006 à 23:11:52 - Ce membre a mis la note : 19
Avatar
Groupe : Membres
19, mais c'est vraiment pour "ne pas mettre 20"... :D

J'ai pas encore fini le TP d'ailleur mais je bosse a fond dessus... Par contre, je me suis inspirer de ta fonction pour trouver le mot dans le dictionnaire pour inventer une fonction qui permet de choisir a quelle ligne se positionner dans un fichier... Pour les interesser, voila le code...

Code : C
#include <stdio.h>
#include <stdlib.h>

long atteindreLigne(long ligneAAtteindre,FILE* pointeurSurFichier)
{
     rewind(pointeurSurFichier);
     long positionLigne=1;
     int caractereLu=0;
     while(positionLigne!=ligneAAtteindre)
     {
          caractereLu=fgetc(pointeurSurFichier);
          if (caractereLu == '\n')
          {
                               positionLigne++;
          }
     }
return 0;
}


Je sais pas si on oeut faire plus simple mais bon...

EDIT : j'ai rajouter le rewind au début de la fonction...
Hors ligne rz0 # Posté le 04/03/2006 à 10:56:14 - Ce membre n'a pas mis de note
meuh
Avatar
Groupe : Membres
Pas vraiment plus simple non mais tu as oublié de rewind au début sinon ça va ajouter les lignes (ou alors faut renommer ta fonction :). Pis sinon tu ne gères pas les conditons eof.

Voilà plusieurs implémentations possibles, de la plus simple à la plus sophistiquée (il n'y a pas de gestion des erreurs sur la première version) :

Le truc c'est que dans ptet 99% des cas, on sait que si getc retourne EOF cela voudra dire "fin de fichier" (il se peut que cela soit faux pour une raison "historique" bien qu'à ma connaissance, aucune implémentation ne fasse ça). Dans ce cas là, on peut simplifier les fonctions (les versions bis).

Code : C
#include <stdio.h>

int p_fskip(FILE *, long);

int
p_fskips1(FILE *fp, long n)
{
        while (n-- > 0)
                while (!feof(fp) && !ferror(fp) && getc(fp) != '\n')
                        continue;
        return (0);
}

int
p_fskip2(FILE *fp, long n)
{
        int c;
        c = 0;
        while (c != EOF && n-- > 0)
                do
                        c = getc(fp);
                while ((c != EOF || !feof(fp) && !ferror(fp)) && c != '\n');
        return (c == '\n' || feof(fp) ? 0 : -1);
}

int
p_fskip2bis(FILE *fp, long n)
{
        int c;
        c = 0;
        while (c != EOF && n-- > 0)
                do
                        c = getc(fp);
                while (c != EOF && c != '\n');
        return (c == '\n' || feof(fp) ? 0 : -1);
}

int
p_fskip3(FILE *fp, long n)
{
        int c;
        while (n-- > 0)
                do {
                        c = getc(fp);
                        if (c == EOF)
                                if (feof(fp))
                                        goto ex;
                                else if (ferror(fp))
                                        goto err;
                } while (c != '\n');
ex:
        return (0);
err:
        return (-1);
}

int
p_fskip4(FILE *fp, long n)
{
        int c;
        while (n-- > 0)
                do {
                        c = getc(fp);
                        if (c == EOF && (feof(fp) || ferror(fp)))
                                goto ex;
                } while (c != '\n');
ex:
        return (c == '\n' || feof(fp) ? 0 : -1);
}

int
p_fskip4bis(FILE *fp, long n)
{
        int c;
        while (n-- > 0)
                do {
                        c = getc(fp);
                        if (c == EOF)
                                goto ex;
                } while (c != '\n');
ex:
        return (c == '\n' || feof(fp) ? 0 : -1);
}

int
p_fskip4bisbis(FILE *fp, long n)
{
        int c;
        while (n-- > 0)
                do {
                        c = getc(fp);
                        if (c == EOF)
                                return (feof(fp) ? 0 : -1);
                } while (c != '\n');
        return (0);
}


Enjoy the C... (Ca devrait marcher, pas tout testé...)
Notez que tout n'est pas supporté, on pourrait facilement rajouter une interface à la manière de fseek avec un paramètre whence et gérer les offsets négatifs.
 
Hors ligne Meothed # Posté le 04/03/2006 à 11:21:56 - Ce membre a mis la note : 19
Avatar
Groupe : Membres
C'est vrai que le rewind "oublié" m'a posé quelques problemes... Je me demandais pourquoi lorsque je faisais une boucle pour lire et afficher la ligne 1 pui la ligne 2...etc... cela m'affichait les lignes 1,2,4,7,11,... ^^

Enfin voila le défaut corriger... :)

Autrement je ne penses pas avoir assé de niveau pour comprendre tout le code de ta fonction donc pour l'instant je me contenterais de la mienne^^ Je vais peut etre rajouter l'affichage d'un message d'erreur si on essaye d'atteindre une ligne qui n'existe pas lorsque l'on dépasse EOF... ;) :euh:

Autrement la j'essaye d'inventer une fonction qui classe les joueurs en fonction de leur score à un jeu... J'ai fait un tableau de struct comprenant le nom du joueur et son score mais je n'arrive pas a classer tout ca... o_O
Hors ligne Lanier # Posté le 05/03/2006 à 18:25:50 - Ce membre a mis la note : 18
Avatar
Groupe : Membres
Yop!
Un petit commentaire pour signaler une minuscule erreur.
Dans la solution, lors de l'explication sur la fonction piocherMot, il est mit
Citation : M@teo21
...Cette fonction va prendre un paramètre : un pointeur sur la zone en mémoire où elle pourra écrire le mot...

Cependant, dans le code il n'y a pas de paramètres à la fonction:

Code : C
char* piocherMot()
{
    FILE* dico = NULL; // Le pointeur de fichier qui va contenir notre fichier
    long nombreMots = 0` numMotChoisi = 0` i = 0;
    int caractereLu = 0;

Sinon que dire à part que ce TP fut très instructif est vachement amusant :D ! 18/20

Lanier
 
Hors ligne M@teo21 # Posté le 07/03/2006 à 13:31:27 - Ce membre n'a pas mis de note
Doh ! Nuts. Mmh, donuts !
Avatar
Admins
Merci

Ce qui se conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément.

Nicolas Boileau (je suis fan)
Suivez l'aventure du SdZ et de Simple IT sur notre blog !
 
Hors ligne jolrael # Posté le 08/03/2006 à 13:17:44 - Ce membre a mis la note : 19
Groupe : Membres
Bien, je met 19, c'etais pas si facile...

par contre sous vc++, l'instruction
Code : C++
lettreTrouvee = malloc(tailleMot * sizeof(int)); posait probleme`

j'ai du mettre un cast explicite afin q'elle veuille bien marcher:
Code : C++
lettreTrouvee =  (int*) malloc(tailleMot * sizeof(int));
Hors ligne M@teo21 # Posté le 08/03/2006 à 20:02:58 - Ce membre n'a pas mis de note
Doh ! Nuts. Mmh, donuts !
Avatar
Admins
C'est parce que visual compile en C++ par défaut.
Pour qu'il compile en C (et donc que tu n'aies pas besoin de faire un cast), il faut modifier les options du projet.

Plus d'info dans ce message :
http://www.siteduzero.com/forum-83-24184-187114-visual-c-2005-express-mais-ou-le-c.html#r187114

Ce qui se conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément.

Nicolas Boileau (je suis fan)
Suivez l'aventure du SdZ et de Simple IT sur notre blog !
 
Hors ligne CrowkaiT # Posté le 11/03/2006 à 03:44:43 - Ce membre a mis la note : 19
Sakila the dolphin
Avatar
Groupe : Membres
Pour vider le buffer ça ne serait pas plus simple d'utiliser fflush(stdin) ?

Sinon vraiment sympa ce TP je me suis bien amusé à le faire :)

Nouveau CMS PHP: PHPBoost, créez votre site complet en quelques clics...
 
Hors ligne BjO # Posté le 11/03/2006 à 17:50:49 - Ce membre a mis la note : 18
TuPerdsTaViiie,ALaaaGagner!!
Avatar
Groupe : Membres
Aller 18 pasque l'exe a telecharger ne marche pas chez moi, dès que j'ai fini la parti (gagner ou perdu) le programme s'arrete directement, j'ai essayer de modifier le code source en mettant un petie system("PAUSE"); mais j'arrive pas a compiler :( (si vous pouvez m'aider...)
 
Hors ligne lost-in-the-shell # Posté le 12/03/2006 à 21:36:38 - Ce membre a mis la note : 18
Arf
Avatar
Groupe : Membres
Tu dis que deux scanf() de suite sont à déconseiller, et tu donnes une méthode pour parer à ça, mais le fflush(stdin) n'est-il pas assez efficace :-° ?
Hors ligne Felor # Posté le 13/03/2006 à 13:26:08 - Ce membre a mis la note : 19
Ceci est un message inutile.
Groupe : Membres
C'est nul.....

:p


19/20 (La perfection n'existe pas :D )

Ok ok >>>>>>>>>>>>>>>>>>>> [] [SDL?] ^^


<-- Owned by ;
 
Hors ligne M@teo21 # Posté le 16/03/2006 à 19:13:30 - Ce membre n'a pas mis de note
Doh ! Nuts. Mmh, donuts !
Avatar
Admins
Non fflush(stdin) est une très mauvaise habitude encore enseignée de nos jours (étonnant d'ailleurs).
On ne peut pas se permettre de l'utiliser car le comportement est indéfini (ça peut faire du caca selon les cas). A éviter à tout prix, c'est pour cela que je n'en ai pas parlé dans le TP

Ce qui se conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément.

Nicolas Boileau (je suis fan)
Suivez l'aventure du SdZ et de Simple IT sur notre blog !
 
Hors ligne Steven # Posté le 17/03/2006 à 10:16:15 - Ce membre n'a pas mis de note
Oh vieux.
Avatar
Groupe : Membres
Super, claire et très astucieux, vraimebt BRAVO

Juste une chose c'est au niveau de la mise en page du TP, c'est pas bien méchant, mais à un moment tu as afficher un code C alors que c'était un code console (dans le début du TP, même le message en code C est Mot secret : E*E*E** alors qu'il devrait être en code console.

Voilà c'est pas une véritable erreur mais je pense que c'est bien de le signaler :)

| Not an UserBar user |

www.Steefleur.fr
 
Hors ligne Fedia # Posté le 18/03/2006 à 13:41:50 - Ce membre n'a pas mis de note
Groupe : Membres
Super TP, J'ai adoré (et galéré mais sinon, ca ne serait pas drole).

En revanche, je n'ai pas compris un passage dans les consignes : "cette fois vous stockerez tous les mots un à un dans un tableau qui aura une taille correspondant exactement au nombre de mots dans le dictionnaire"
On ne stoque pas tous les mots du dictionnaire, simplement le mot pioché, non ???
 
Hors ligne Blade-974 # Posté le 19/03/2006 à 11:50:10 - Ce membre a mis la note : 20
J'adore les sushis
Groupe : Membres
Tres bien le TP. Au début, j'avais un peu la flemme de faire le TP, mais c'est juste parce que je savais pas par ou commencer :/. La 1ere partie j'y ai mis deux heures, et la seconde jlai pas encore faite, jai pas eu le tps :euh: ! lol. Voila, jmets 20!!



PS : Vivement SDL!!

God bless Feisty Fawn
 
Hors ligne Escalquinou # Posté le 20/03/2006 à 06:26:42 - Ce membre n'a pas mis de note
Groupe : Membres
Bonjour a tous

TP super sympa, j'ai apprecie mais j'ai une petite question. Tu deconseilles d'utiliser le scanf et effectivement ca ne marche pas avec un %c mais si on utilise %s ca fonctionne. Est ce que cette technique est bonne, ou risquee ? Est ce une coup de chance ?
De meme pour parcourir le fichier, tu utilises la fonction getc pour detecter le nombre de \n et donc trouver le nombre de mots mais ne serait ce pas plus facile avec la fonction fscanf qui va automatiquement lire le mot entier et passer a la ligne apres (de plus il n'est pas utile d'enlever le \n apres) ? Je pose cette question car dans mon programe cela fonctionne mais peut etre que c'est risque ou qu'il vaut mieux eviter.

Dans ce TP, il est conseille de poster son code afin d'avoir des remarques des autres Zero ou "non Zero" donc je joins mon code afin d'avoir peut etre quelques remarques qui pourront me faire progresser.

Merci d'avance et desole pour les accents, clavier qwerty !

Et longue vie a ce fabuleux site

Code : C
// pendu.cpp : Defines the entry point for the console application.
//
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "stdafx.h"
#include "pendu.h"

void affichageMot(char motSecret[],char lettreTrouve[]);
void affichagePendu(int coupRestant);
int     testLettre(char motSecret[],char lettrePropose);
int lettreRestante(char motSecret[],char lettreTrouve[]);
char* genererMot(char motSecret[] );

int main(int argc, char* argv[])
{
        int coupRestant=10;
        int recherche=0;
        char lettrePropose;
        char motSecret[50]="k";
        char lettreTrouve[50] = "";
        int nbreLettreRestante=0;
        genererMot(motSecret);
        do
        {
                affichagePendu(coupRestant);
                affichageMot(motSecret,lettreTrouve);
                printf("Quelle lettre proposez vous ? ");
                scanf("%s",&lettrePropose);
                lettrePropose=toupper(lettrePropose);
                recherche=testLettre(motSecret,lettrePropose);
                if (recherche==1)
                {
                        sprintf(lettreTrouve,"%s%c",lettreTrouve,lettrePropose);
                        printf("\nVous avez trouve une lettre !!!\n\n____________________________________\n\n");
                }
                else
                {
                        coupRestant--;
                        printf("\nDomage, cette lettre n'est pas dans le mot !!!\n\n____________________________________\n\n");
                }
                nbreLettreRestante=lettreRestante(motSecret,lettreTrouve);
                if (coupRestant==0)
                {
                        affichagePendu(coupRestant);
                        printf("\n!!!!!!!  P E R D U   !!!!!!!!!!!!\n\n\n");
                }
                if (nbreLettreRestante==0)
                {
                        printf("\nC'EST GAGNE, LE MOT ETAIT BIEN : %s\n\n\n",motSecret);
                }
        }while (nbreLettreRestante!=0 && coupRestant!=0 );

        return 0;
}

char* genererMot(char motSecret[] )
{       
        char motGenere[50]="";
        int i=0;
        int nbreMot=0;
        int numMotGenere=0;
        FILE* fichierMot=NULL;
        fichierMot=fopen("mots.txt","r");
        if (fichierMot != NULL)
    {
                while (!feof(fichierMot))
                {
                        nbreMot++;
                        fscanf(fichierMot,"%s");
                }
                rewind(fichierMot);
                srand(time(NULL));
                do
                {
                        numMotGenere=(rand() % nbreMot);
                }while(numMotGenere==0);
                printf("\n%d\n",numMotGenere);
                for (i=0;i<numMotGenere;i++)
                {
                        fscanf(fichierMot,"%s",motGenere);
                }
                strcpy(motSecret,motGenere);
        }
    else
    {
        // On affiche un message d'erreur si on veut
        printf("Impossible d'ouvrir le fichier mot.txt");
    }
        fclose(fichierMot);
        return 0;
}

int lettreRestante(char motSecret[],char lettreTrouve[])
{
        int nbreLettreRestante=0;
        char* resultatRecherche=NULL;
        int j=0;
        while (motSecret[j]!='\0')
        {
                resultatRecherche=strchr(lettreTrouve,motSecret[j]);
                if (resultatRecherche!=NULL)
                {
                }
                else
                {
                        nbreLettreRestante++;
                }
                j++;
        }
        return nbreLettreRestante;
}

int     testLettre(char motSecret[],char lettrePropose)
{
        char* resultatRecherche=NULL;
        resultatRecherche=strchr(motSecret,lettrePropose);
        if (resultatRecherche!=NULL)
        {
                return 1;
        }
        else
        {
                return 0;
        }
}

void affichageMot(char motSecret[],char lettreTrouve[])
{
        char* resultatRecherche=NULL;
        int j=0;
        printf("\nLe mot a trouve est : ");
        while (motSecret[j]!='\0')
        {
                resultatRecherche=strchr(lettreTrouve,motSecret[j]);
                if (resultatRecherche!=NULL)
                {
                        printf("%c",motSecret[j]);
                }
                else
                {
                        printf("*");
                }
                j++;
        }
        printf("\n");
}

void affichagePendu(int coupRestant)
{
        if (coupRestant == 10)
        {
                printf("\nPlus que %d chances !\n",coupRestant);
                printf("\n  O\n /|\\\n /'\\\n       ");
        }
        else if (coupRestant == 9)
        {
                printf("\nPlus que %d chances !\n",coupRestant);
                printf("\n  O\n /|\\\n /'\\   #####\n       ");
        }
        else if (coupRestant == 8)
        {
                printf("\nPlus que %d chances !\n",coupRestant);
                printf(" \n        \n         O\n        /|\\\n        /'\\\n       #####  \n");
        }
        else if (coupRestant == 7)
        {
                printf("\nPlus que %d chances !\n",coupRestant);
                printf(" \n        \n         O\n        /|\\\n        /'\\\n_|_    #####  \n");
        }
        else if (coupRestant == 6)
        {
                printf("\nPlus que %d chances !\n",coupRestant);
                printf(" \n        \n         O\n |      /|\\\n |      /'\\\n_|_    #####  \n");
        }
        else if (coupRestant == 5)
        {
                printf("\nPlus que %d chances !\n",coupRestant);
                printf(" \n |       \n |       O\n |      /|\\\n |      /'\\\n_|_    #####  \n");
        }
        else if (coupRestant == 4)
        {
                printf("\nPlus que %d chances !\n",coupRestant);
                printf(" ____\n |       \n |       O\n |      /|\\\n |      /'\\\n_|_    #####  \n");
        }
        else if (coupRestant == 3)
        {
                printf("\nPlus que %d chances !\n",coupRestant);
                printf(" ________\n |       \n |       O\n |      /|\\\n |      /'\\\n_|_    #####  \n");
        }
        else if (coupRestant == 2)
        {
                printf("\nPlus que %d chances !\n",coupRestant);
                printf(" ________\n |/      \n |       O\n |      /|\\\n |      /'\\\n_|_    #####  \n");
        }
        else if (coupRestant == 1)
        {
                printf("\nPlus que %d chances !\n",coupRestant);
                printf(" ________\n |/      |\n |       O\n |      /|\\\n |      /'\\\n_|_    #####  \n");
        }
        else if (coupRestant == 0)
        {
                printf(" ________\n |/      |\n |       O\n |      /|\\\n |      /'\\\n_|_  \n");
                                }
}
Hors ligne M@teo21 # Posté le 05/04/2006 à 11:03:42 - Ce membre n'a pas mis de note
Doh ! Nuts. Mmh, donuts !
Avatar
Admins
Le %s est pas adapté, et on peut dire que c un coup de chance car tu débordes très probablement en mémoire. A éviter absolument ;)

Ce qui se conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément.

Nicolas Boileau (je suis fan)
Suivez l'aventure du SdZ et de Simple IT sur notre blog !
 
Hors ligne Bogoris # Posté le 02/05/2006 à 23:23:53 - Ce membre n'a pas mis de note
Exit light ! Enter night !
Avatar
Groupe : Membres
Citation : M@teo21
Que fait dans un cas comme ça ?


Sinon moi j'ai réussi à faire un programme en une après-midi... c'est sur le dictionnaire de mot que j'ai le plus galéré... pas mal à cause du dernier caractère "\n" (moi j'ai récupéré les mots avec un fgets)... j'ai résolu le problème d'une manière un peu tordu : j'ai fait une allocation dynamique en prenant le même espace en mémoire qu'avec ma chaîne "brute" (strlen(premiereVariableDeChaine) en quelque sorte) - 1 char, et j'ai copié chaque caractère dans mon autre tableau, sauf le dernier... mais c'est vrai que la technique de remplacer le \n par un \0 est beaucoup mieux... vu que de toute menière il faut un \0 dans chque chaîne de caractère...
 
Hors ligne Freeman9999 # Posté le 31/05/2006 à 14:08:51 - Ce membre n'a pas mis de note
Groupe : Membres
Bonjour, j'ai un problème avec le TP :
J'avais donc decidé que pour afficher les mot mystere avec les "*", j'utiliserais une boucle while.
voici mon code :
Code : C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char scand();
int main(int argc, char *argv[])
{
    char motMystere[20] = "PAPIER";
    char lettreEntree = '0';
    long compteur = 10;
    long i = 0;
    long a = 0;
    long test = 0;
    char caractereActuel = '0';
    char caractereActuelBis = '0';
   
   
   
    printf("Ceci est un pendu, le but du jeu est simple, je tire un mot au hazard, et vous, vous devez le trouvez, lettre par lettre, mais ATTENTION, vous n'avez le droit qu'a un certain nombre d'erreurs ;)\n\n\n\n");
    printf("A vous de jouer !\n\n\n\n");

  printf("Il vous reste %ld coups a jouer.\n", compteur);
  printf("Quel est le mot secret ? ");
  i = 0;
  while(caractereActuel != '\0')
  {
                  caractereActuel = motMystere[i];
                 
                  if(a = i + 1, test = 1, caractereActuel != '\0')
                  {
                       printf("%c");
                  }
                  else if (caractereActuel != '\0')
                  {
                      printf("*");
                  }
                  i++;
  }
  printf("\n");
  printf("Proposez une lettre : ");
  lettreEntree = scand();
  i = 0;
  a = 0;
  test = 0;
  while (caractereActuelBis != '\0')
  {
        caractereActuelBis = motMystere[i];
        i++;
        if(caractereActuelBis = lettreEntree)
        {
        a = i + 1;
        test = 1;
        }
  }
  printf("\n\n\n");

 
 
 
 
  system("PAUSE");     
  return 0;
}
char scand()
{
     char caractere = 0;

    caractere = getchar(); // On lit le premier caractère
    caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà

    // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
    while (getchar() != '\n') ;

    return caractere; // On retourne le premier caractère qu'on a lu
}


le code est loin d'être fini et il reste des petit problème à regler, mais mon plus gros problème est celui-ci quand je compile pui execute le programme voia ce qui se passe :

Code : Console

Ceci est un pendu, le but du jeu est simple, je tire un mot au hazard, et vous, vous devez le trouvez, lettre par lettre, mais ATTENTION, vous n'avez le droit qu'a un certain nombre d'erreurs ;)


A vous de jouer !


Il vous reste 10 coups a jouer .
le mot mystere est : 000000
proposez une lettre :





2 problème se posent, comme vous le voyez au lieu de "*" le codde afficher des 0, ( car j'ai initialiser mais chaine avec zero ), quand on entre une lettre le code plante ... Merci de m'aider :euh:
Hors ligne GuardedDragon # Posté le 12/07/2006 à 00:20:45 - Ce membre a mis la note : 15
Longue vie à Zozor !
Groupe : Membres
Hmm... rz0 ?

Je bavais déjà en essayant de faire ce TP et tu nous arrives avec ça.

Voilà, j'ai une question sur ce que tu as dit : Euh... hein ? :euh:

C'est moi qui a pris du retard ou c'est normal que je comprenne pas un mot de ce qu'il a raconté ? o_O

Sinon, bon sujet, bien expliqué. Comme à ton habitude M@teo.
Hors ligne Webanix # Posté le 27/07/2006 à 02:32:53 - Ce membre a mis la note : 18
Groupe : Membres
Bon TP, il y a juste un truc que j'arrive pas à encaisser :colere2: , c'est que Mateo tu nous a dis que les pointeurs étaient ultra importants et là dans ton programme tu utilises en tout et pour tout 2 pointeurs, et encore pour le dico...
Ca m'étonne mais bon sinon le TP est très bien...
 
Hors ligne Bilou64 # Posté le 28/07/2006 à 23:44:35 - Ce membre a mis la note : 18
Mais euh, marche pas ...
Groupe : Membres
J'ai un problème : voici ce code faisant partie de la correction du TP

Code : C
/* Le curseur du fichier est positionné au bon endroit.
On n'a plus qu'à faire un fgets qui lira la ligne */

fgets(motPioche` 100` dico);

// On vire l'\n à la fin
motPioche[strlen(motPioche) - 1] = '\0';


Par exemple, si on prend le mot MARRON, qui fait 6 lettres (si si c'est vrai ^^), strlen(motPioche) vaudra donc 6. A ceci, on retire 1, on va donc avoir motPioche[5], qui va donc avoir comme valeur '\0'.
Or motPioche[5] correspond à la lettre O dans le cas de MARRON ! Bref, on va remplacer le O par '\0'.

Serait-ce une erreur de notre merveilleux wemaster :p ou bien moi qui ai lu un chapitre trop vite ?

A votre bon coeur, Bilou.

Un nain reste un nain
 
Hors ligne jonhwoods # Posté le 04/08/2006 à 16:09:48 - Ce membre n'a pas mis de note
Groupe : Membres
Boujours à vous, je vien de commencer les tutos de C++ (meme si ya eu que du C) et après avoir bien étudier le code de notre fabuleux prof j'ai essayé de faire mon jeu. Voici ce que sa donne.

Code : C
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int gagne(int lettreTrouvee[]);
int rechercheLettre(char lettreChoisie, int lettreTrouvee[], char motMystere[]);
char lireLettre();


int main()
{
        int lettreTrouvee[30] = {0};
        char motMystere[30] = "MARRON";
        long i = 0;
        long vies = 10;
        char lettreChoisie;
        printf("Bienvenu dans le pendu!\n\n");
        while (vies > 0 && !gagne(lettreTrouvee))
        {
            printf("Il vous reste %ld vies.\n", vies);
            printf("Le mot mystere est:");
            for (i = 0; i < 6; i++)
            {
                if (lettreTrouvee[i])
                printf("%c", motMystere[i]);
            else
                printf("*");
            }
    printf("\nChoisisez une lettre:");
    lettreChoisie = lireLettre();
    if (!rechercheLettre(lettreChoisie, lettreTrouvee, motMystere))
        vies--;
        }
        if (gagne(lettreTrouvee))
        printf("Bravo! Le mot mystere etait bien %s", motMystere);
    else
        printf("N00B! Tu vien de te faire pwner par le mot %s", motMystere);
        return 0;
}

char lireLettre()
{
    char lettreChoisie;
    lettreChoisie = getchar();
    lettreChoisie = toupper(lettreChoisie);
    while (getchar() != '\n');

    return lettreChoisie;
}

int rechercheLettre(char lettreChoisie, int lettreTrouvee[], char motMystere[])
{
    long i = 0;
    int result = 0;
    for (i = 0; motMystere[i] != '\0'; i++)
    {
        if (lettreChoisie == motMystere[i])
        {
            result = 1;
            lettreTrouvee[i] = 1;
        }
    }
    return result;
}

int gagne(int lettreTrouvee[])
{
    long i = 0;
    int result = 1;
    for (i = 0 ; i < 6; i++)
    {
        if (!lettreTrouvee[i])
            result = 1;
    }
    return result;
}





Le code compile bien. Je lance et POP! un simple flash :o . Comment c'est possible? Il devrait y avoir au moins un appuyer sur une touche pour continuer à la fin non? (J'utilise Code::Blocks)

Merci d'avance pour vos conseils

Edit: j'ai rajouté un pause à la fin. La fenetre s'ouvre et affiche seulement
Code : Console
Appuyez sur une touche pour continuer...

:(
Hors ligne rockforever # Posté le 17/08/2006 à 18:34:35 - Ce membre a mis la note : 20
Avatar
Groupe : Membres
franchement merci, je commence juste la programmation et j'arrive maintenant a faire des chose que je n'aurai pas imaginé. ^^
vraiment merci car en plus c'est super bien expliqué ! ;)

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 148 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.0525s (0.0404s)