knockner
Messages postés5Date d'inscriptionjeudi 4 septembre 2008StatutMembreDernière intervention17 novembre 2008
-
16 nov. 2008 à 21:40
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024
-
17 nov. 2008 à 21:44
Voici mon programme je n'arrive pas a trouver mon erreurs , le programme se lance il faut appuyer 2 fois sur entrée , et des que l'on rentre une lettre le tableau n'affiche plus les etoiles , il affiche la lettre , seule la decrementation marche correctement.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char motSecret[]="ABSORBTION";
char tableauLettre[11]="**********";
char nombresChances = 10;
char motRentre =0;
long i= 0;
printf("****** Jeux du Pendu ******\n\n"); // INTRO
while (nombresChances != 0)
{
printf("Le mot secret est?:%s\n", tableauLettre);
printf("Rentrer 1 lettre \n");
fgets(tableauLettre, 11, stdin); //UTILISATEUR RENTRE UNE LETTRE
scanf("%c", &motRentre);
for (i=0; i<11; i++) //PARCOUR LE TABLEAU
{
if (motSecret[i]== motRentre) //COMPARE LE motRentre si il est dans le motSecret
{
tableauLettre[i]= motRentre;
printf("%s\n", tableauLettre[i]); //AFFICHE le tableau et la lettre à trouver
printf("Plus que %ld chances de gagner\n", nombresChances);
}
}
if (motSecret[i] != motRentre)
{
nombresChances--;
printf("Plus que %ld chances de gagner\n", nombresChances);
}
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024103 17 nov. 2008 à 11:45
Hello,
Alors, pourquoi le mot secret ne s'affiche plus? Tout simplement parce que tu l'effaces à la ligne:
fgets(tableauLettre, 11, stdin); //UTILISATEUR RENTRE UNE LETTRE
Ensuite, pourquoi il faut appuyer 2 fois sur ENTREE? Tout simplement parce que tu demandes 2 fois une intervention utilisateur avec les lignes suivantes:
fgets(tableauLettre, 11, stdin); <-- tu demandes une 1ère fois une chaine saisie par l'utilisateur
scanf("%c", &motRentre); <-- tu demandes un caractère
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
knockner
Messages postés5Date d'inscriptionjeudi 4 septembre 2008StatutMembreDernière intervention17 novembre 2008 17 nov. 2008 à 18:26
Merci pour ta reponse mais encore quelques questions
Si je suprimer mon scanf , mon pendu m'affiche ceci:
Le mot secret est ?: **********
Rentrer une lettre
A
<null>
Plus que 10 chance de gagner
Le mot secret est ?: A
Si je suprime mon fgets le programme plante.
je ne voit pas d'ou sort le <null>
Pouvais m'aider et me dire comment faire que si la lettre corespond on affiche la lettre puis les autres en * et que la ne fasse pas comme dans mon programme que des que l'on rentre une lettre le tableau affiche la lettre.
printf("****** Jeux du Pendu ******\n\n"); // INTRO
while (nombresChances != 0)
{
printf("Le mot secret est?:%s\n", tableauLettre);
printf("Rentrer 1 lettre \n");
scanf("%c", &motRentre); <-- Saisie du caractère
for (i =0; i<11; i++) //PARCOUR LE TABLEAU
{
if (motSecret[i]= = motRentre) //COMPARE LE motRentre si il est dans le motSecret
{
tableauLettre[i]= motRentre; <-- Suppression des printf "pollueurs"
}
}
if (strcmp(motSecret,tableauLettre)) <-- Comparaison de chaines (2) {
nombresChances--;
printf("Plus que %ld chances de gagner\n", nombresChances);
fflush(stdin); <-- Pour nettoyer le buffer de saisie }
else
{
printf("Bravo, vous avez trouve en %d coups\n",nombresChancesTotal-nombresChances);
break;
}
}
system("PAUSE");
return 0;
}
Remarques:
(1): minuscules pour simplifier la comparaison des caractères (sinon, faut tester majuscule ET minuscule)
(2): en C, la comparaison de chaines de caractères ne se fait pas avec " =="
N'hésites pas si tu as des questions sur le code
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Vous n’avez pas trouvé la réponse que vous recherchez ?
knockner
Messages postés5Date d'inscriptionjeudi 4 septembre 2008StatutMembreDernière intervention17 novembre 2008 17 nov. 2008 à 21:26
Merci beaucoup Buno effectivement maintenant le programme fonctionne.
Maintenant j'aimerais mettre si possible un mot au hazard , faire une randomisation , que le mot ne soit pas toujours absorbtion.
je sais qu'il faut mettre:
#include <time.h>
srand(time(NULL));
motSecret = rand()
Mais apres je ne voit pas trop comment faire pour que le nom soit un nom valide pas exemple que cela ne donne pas par exemple : "azeididid" mais un mot qui a un sens comme "chemise" par exemple.
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024103 17 nov. 2008 à 21:44
Oulah...c'est un peu compliqué ça: générer aléatoirement un mot valide...
Ce que tu peux faire pour biaiser le truc est la chose suivante:
- un fichier avec une liste de mots
- une génération aléatoire d'index qui te permettra d'aller chercher le i-ème mot de cette liste
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...